6

我有一个 uint 值,我需要将其表示为 ByteArray 并转换为字符串。当我将字符串转换回字节数组时,我发现了不同的值。我正在使用标准的 ASCII 转换器,所以我不明白为什么我会得到不同的值。更清楚地说,这就是我正在做的事情:

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

bytearray 结果与第一个不同:

数组->

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

结果->

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

请注意,两个数组中的字节 1 是不同的。

谢谢你的支持。

问候

4

2 回答 2

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

因为原始数据不是 ASCIIEncoding.GetString仅当您正在解码的数据是该编码中的文本数据时才有意义。其他任何东西:你破坏了它。如果您想将 a 存储为 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 回答