我有一个uint值,我需要将其表示为ByteArray并将其转换为字符串。 当我将字符串转换回字节数组时,我发现了不同的值。 我正在使用标准的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不同。
感谢您的支持。
此致
答案 0 :(得分:12)
string test = System.Text.Encoding.ASCII.GetString(bArray);
byte[] result = Encoding.ASCII.GetBytes(test);
因为原始数据不是ASCII 。如果您要解码的数据是该编码中的文本数据,则Encoding.GetString
仅有意义。还有别的:你腐败了。如果你想将byte[]
存储为string
,那么base-n是必要的 - 通常是base-64,因为a:它可以方便地使用(Convert.{To|From}Base64String
),b:你可以适合ASCII,所以你很少遇到代码页/编码问题。例如:
byte[] bArray = BitConverter.GetBytes((uint)49694);
string test = Convert.ToBase64String(bArray); // "HsIAAA=="
byte[] result = Convert.FromBase64String(test);
答案 1 :(得分:3)
Because c2 is not a valid ASCII char and it is replaced with '?'(3f)
使用SomeEncoding.GetString()
将任何字节数组转换为字符串不是注释中建议的@activwerx安全方法。而是使用Convert.FromBase64String
,Convert.ToBase64String