2014-03-03 3 views
0

Queue<byte> 목록을 비교 문자열로 변환 할 때 문자 사이에 공백이 삽입되는 문제가 있습니다. 그러나 큐가 7 개의 값만 보유하고 디버깅 할 때 나는 여전히 7 개의 문자 값을 볼 수 있기 때문에 실제 공백 문자라고 생각하지 않습니다. 이미지보기 :공백이 BitConverter 사용시 삽입 됨

관련 코드 :

Queue<byte> bufKeyword = new Queue<byte>(7); 

    // Remove old byte from queue and add new one 
    if (bufKeyword.Count == 7) bufKeyword.Dequeue(); 
    bufKeyword.Enqueue((byte)fsInput.ReadByte()); 

    // Check buffer string for match 
    StringBuilder bufKeywordString = new StringBuilder(); 

    foreach (byte qByte in bufKeyword) { 
     bufKeywordString.Append(Encoding.ASCII.GetString(BitConverter.GetBytes(qByte))); 
    } 

    string _bufKeywordString = bufKeywordString.ToString(); 
    Console.WriteLine("{0}", _bufKeywordString); //DEBUG - SEE IMAGE 

    StringBuilder bufWriteString = new StringBuilder(); 
    if (_bufKeywordString.StartsWith("time=")) //Does not work because of 'whitespace' 
    { 
     for (int i = 1; i < 25; i++) { bufWriteString.Append(fsInput.ReadByte()); }  // Read next 24 bytes 
     fileWriteQueue.Enqueue(bufWriteString.ToString());        // Add this data to write queue 
     fileWriteQueueCount++; 
     fileBytesRead += 24;               // Change to new spot in file 
    } 
+0

이 보이는보십시오. – Matthew

답변

3

byte 인수에 대한 BitConverter.GetBytes 없습니다. byteshort으로 변환되고 BitConverter.GetBytes(short)은 두 요소의 배열을 반환합니다.

그래서 대신

bufKeywordString.Append(Encoding.ASCII.GetString(BitConverter.GetBytes(qByte))); 

는 UTF-16가 아닌 아스키처럼

bufKeywordString.Append(Encoding.ASCII.GetString(new byte[] {qByte}); 
+0

정말 고마워요! 이제 인자 타입에 대한 리턴 타입을 잘못 알았습니다. – Rawrcasm