6

ByteArrayとして表す必要のあるuint値と、文字列での変換があります。文字列をバイト配列に変換し直すと、さまざまな値が見つかりました。標準のASCIIコンバーターを使用しているので、異なる値を取得する理由がわかりません。より明確にするために、これは私がしていることです:

byte[] bArray = BitConverter.GetBytes((uint)49694);
string test = System.Text.Encoding.ASCII.GetString(bArray);
byte[] result = Encoding.ASCII.GetBytes(test);

bytearrayの結果は、最初の結果とは異なります。

bArray->

[0x00000000]: 0x1e
[0x00000001]: 0xc2
[0x00000002]: 0x00
[0x00000003]: 0x00

結果->

[0x00000000]: 0x1e
[0x00000001]: 0x3f
[0x00000002]: 0x00
[0x00000003]: 0x00

バイト1が2つの配列で異なることに注意してください。

ご協力ありがとうございました。

よろしく

4

2 に答える 2

15
string test = System.Text.Encoding.ASCII.GetString(bArray);
byte[] result = Encoding.ASCII.GetBytes(test);

生データはASCIIではないため。デコードするデータがそのエンコーディングのテキストデータである場合にEncoding.GetStringのみ意味があります。他の何か:あなたはそれを破壊します。aをとして保存する場合は、base-nが必要です。通常はbase-64です。これは、a:便利に利用できる()、b:ASCIIに収めることができるため、コードページやエンコーディングの問題が発生することはめったにありません。 。例えば:byte[]stringConvert.{To|From}Base64String

byte[] bArray = BitConverter.GetBytes((uint)49694);
string test = Convert.ToBase64String(bArray); // "HsIAAA=="
byte[] result = Convert.FromBase64String(test);
于 2012-11-12T13:00:48.613 に答える
3
Because c2 is not a valid ASCII char and it is replaced with '?'(3f)

@activwerxがコメントで示唆しているように、を使用してバイト配列を文字列に変換することSomeEncoding.GetString()は安全な方法ではありません。代わりに、を使用してくださいConvert.FromBase64StringConvert.ToBase64String

于 2012-11-12T12:53:01.300 に答える