C#ByteArray转换为字符串并返回

时间:2012-11-12 12:51:14

标签: c# type-conversion

我有一个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不同。

感谢您的支持。

此致

2 个答案:

答案 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.FromBase64StringConvert.ToBase64String