2012-03-22 7 views
7

私は30バイトの配列であるバイトを持っていますが、私がBitConverter.ToStringを使うと、それは16進文字列を表示します。バイトは 0x42007200650061006B0069006E00670041007700650073006F006D0065です。 これはUnicodeにもあります。バイト配列を文字列に変換するにはどうすればよいですか?

これはB.r.e.a.k.i.n.g.A.w.e.s.o.m.eを意味しますが、16進数からUnicodeに変換する方法はわかりません。

答えて

14

Encodingのいずれかのクラスを使用できます。これらのバイトがどのようなエンコーディングであるかを知る必要があります。

string val = Encoding.UTF8.GetString(myByteArray); 

あなたはUnicodeエンコードのような外観を表示している値は、そのUTF8またはUnicodeは良い賭けのように見えます。あなたは、通常仮定するべきではありません

string text = Encoding.Unicode.GetString(bytes); 

エンコーディングはしかし何であるか - それはあなたがデータについて知っている何かをする必要があります:あなたはEncoding.Unicodeをしたいので、それはそのように見えます

+0

ありがとう!それは働いた。 –

+3

@IanLundberg: 'Encoding.UTF8'を使用すると、入力データの2倍の長さの文字列が得られることに注意してください。いくつかの出力形式では*見ることはできませんが、他のすべての文字はU + 0000になります。 –

+0

ああ私はそれを認識していませんでした –

4

は、リトルエンディアンUTF-16です。他のエンコーディングでは、明らかに別のEncodingインスタンスを使用しますが、Encodingはテキストのバイナリ表現に適したクラスです。

EDIT:コメントで述べたように、あなたはバイト配列の開始から(あなたがEncoding.BigEndianUnicodeを必要とした場合)またはケース内だけEncoding.Unicode終了(どちらかから「00」に欠けているように見えます結構です)。

(但し、任意のバイナリデータを取り込んでテキストとして表現する場合は、hexまたはbase64を使用する必要がありますが、ここには該当しませんが、それに気をつけてください)

関連する問題