【问题标题】:C# ByteArray to string conversion and backC# ByteArray 到字符串的转换和返回
【发布时间】:2012-10-31 21:30:17
【问题描述】:

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

感谢您的支持。

问候

【问题讨论】:

  • 这是被问到的。你在 SO 上搜索过吗?

标签: c# type-conversion


【解决方案1】:
Because c2 is not a valid ASCII char and it is replaced with '?'(3f)

使用 SomeEncoding.GetString() 将任何字节数组转换为字符串并不是 cmets 中建议的 @activwerx 的安全方法。而是使用Convert.FromBase64StringConvert.ToBase64String

【讨论】:

  • 感谢您的回答。 C1 是扩展 ASCII 中的有效字符。有没有办法处理这种情况?提前致谢!
  • @lordpurple,如果值不是标准 ASCII,您可能需要使用不同的编码,例如 Encoding.UTF8 等。
  • @lordpurple 使用 SomeEncoding.GetString() 将 any 字节数组转换为字符串不是一种安全的方法。而是使用Convert.FromBase64StringConvert.ToBase64String
【解决方案2】:
string test = System.Text.Encoding.ASCII.GetString(bArray);
byte[] result = Encoding.ASCII.GetBytes(test);

因为原始数据不是 ASCIIEncoding.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);

【讨论】:

    猜你喜欢
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多