私は一般に、人間が判読可能な形式でシリアル化されたデータメッセージを含む言語を持っていますが、言語内の一部のプロダクションにはそのままのバイナリデータが含まれています。バイナリの内容をマングリングせずにByte()から文字列を取得するにはどうすればよいですか?
私のパーサーは、そのバッファにString
を使用しています。これは、作業するのが最も簡単な方法です。しかし、データはネットワークソケットからByte
の配列に読み込まれます。
今、私はByte()
とString
間のドットを接続しようとしている:ASCIIエンコーディングは、言葉だけで私のバイトを残して無効であることが判明しただろうと
' data as Byte()
' count as Integer
' buffer as String
buffer += System.Text.Encoding.ASCII.GetString(data, 0, count)
しかし、私の最初の仮定。 7ビットモデルに収まらない値を持つバイトは'?'
に変換されました。
' data as Byte()
' count as Integer
' buffer as String
Dim enc = New System.Text.UTF8Encoding
buffer += enc.GetString(data, 0, count)
しかし、私のデータはまだマングルされている:
だから、私は一人で私のバイトを残すだけでなく、8ビットの範囲全体の値を許可する必要があり、シングルバイトの「ユニコード」エンコーディングを使用して考えました。私は実際にはを正確にのように推論することはできませんでしたが、データの長さが変化していることを知っています。バイトがそのまま残っていないことを示しています。
String
の内容は、Bytes()
の入力の内容をそのままコピーしたものですか。
どのようにバイトを最初にエンコードしましたか? – JaredPar
@ JaredPar:テキストはエンコードされません。問題のバイトはバイナリです。 (入力データストリームの人間が読めるセクションはASCIIですが)このエンコーディングに不可欠なものを維持しながらByte()から 'String'を取得したいのです。おそらくVB.NETはこれをサポートしていませんか? –
あなたは正しくデコードするためにエンコーディングについて少し知っておく必要があります。エンコーディングをバイトストリーム自体にエンコードしない限り、それは本当に無関心ではありません。人間が読めるようなコンテンツを見過ごしている可能性があります。あなたは 'byte()'のフォーマットを持っていますか? – JaredPar