2012-03-14 1 views
4

필자는 일반적으로 사람이 읽을 수있는 형식으로 일련 화 된 데이터 메시지를 포함하는 언어를 사용하지만 언어의 일부 프로덕션에는 그대로 원시 이진 데이터가 포함되어 있습니다.이진 내용을 mangling하지 않고 Byte()에서 String을 얻으려면 어떻게해야합니까?

내 파서는 가장 쉬운 방법 인 버퍼이므로 String을 버퍼로 사용합니다. 그러나 데이터는 네트워크 소켓에서 Byte의 배열로 읽습니다.

지금, 나는 Byte()String 사이의 점들을 연결하기 위해 노력하고있어 : 아스키 인코딩 그냥 혼자 바이트를 떠나 무효로 판명 것이라고

' data as Byte() 
' count as Integer 
' buffer as String 

buffer += System.Text.Encoding.ASCII.GetString(data, 0, count) 

하지만 내 초기 가정; 7 비트 모델에 맞지 않는 값을 가진 모든 바이트는 '?'으로 변환되었습니다.

그래서 그때는 단일 바이트 "유니 코드"혼자 바이트를 남길뿐만 아니라 8 비트 범위에서 값을 허용해야 인코딩을 사용하는 방법에 대한 생각 :

' data as Byte() 
' count as Integer 
' buffer as String 

Dim enc = New System.Text.UTF8Encoding 
buffer += enc.GetString(data, 0, count) 

을하지만 내 데이터는 여전히 엉망이다. 실제로 실제로 을 추론 할 수 없었습니다. 데이터가 맹 글링되는 방식은 정확히입니다. 그러나 데이터의 길이가 변경되면서 바이트가 축 어적으로 남지 않음을 나타냅니다.

String 내용은 내 Bytes() 입력의 내용을 축 어적으로 그대로 복사 한 것입니다.

+1

처음에 바이트를 어떻게 인코딩 했습니까? – JaredPar

+0

@ JaredPar : 텍스트 인코딩이 없습니다. 해당 바이트는 2 진수입니다. (들어오는 데이터 스트림의 사람이 읽을 수있는 섹션은 ASCII 임에도 불구하고)이 인코딩을 유지하지 않는 동안 Byte()에서 'String'을 얻고 싶습니다. 아마 VB.NET이 이것을 지원하지 않습니까? –

+0

올바르게 디코딩하기 위해 인코딩에 대해 약간 알아야하므로 인코딩을 바이트 스트림 자체로 인코딩하지 않는 한 실제로는 불가 지합니다. 사람이 읽을 수있는 내용을 지나서 읽을 수없는 부분을 조사하고있는 것처럼 들릴 수도 있습니다. 'byte()'에 대해 포맷을 설정 했습니까? – JaredPar

답변

2

우리의 코멘트 토론을 바탕으로 인코딩의 abscence에서 Byte 인스턴스를보고 싶은 것 같습니다. 이 경우 String 대신 List(Of Byte)을 사용하는 것이 좋습니다.

+0

실제로; .NET 'String'유형이 인코딩 인식이라는 사실을 깨닫지 못해서 전체적인 문제의 근본 원인이되었습니다. 따라서 가장 좋은 해결책은'String '이 제공하는 쉬운 하위 문자열 검색 작업을 잃어 버리지 않고 전체 파서 전체에서 summat을 사용하는 것입니다. 이것은 이제 완료되었으며 잘 작동합니다. 감사! –

관련 문제