首页 > 解决方案 > 无法将字节数组转换为字符串,反之亦然

问题描述

我正在尝试将字节数组转换为字符串,但字节未正确转换为字符串。

byte[] testByte = new byte[]
{
    2, 200
};

string string1 = Encoding.ASCII.GetString(testByte);
byte[] byte1 = Encoding.ASCII.GetBytes(string1);

string1 给出的值是 \u0002?并且 byte1 没有被转换回 2 和 200。我尝试使用 UTF8 但这也给出了同样的问题。

我得到了 256 个字符和整数值数组。我需要将这些值作为字符串写在媒体上,然后作为字节读回。我需要转换才能写入和读取字节数据。当整数值大于 127 时,我会遇到问题。

我应该怎么做才能从字符串中获取原始字节值?

标签: c#arrays

解决方案


您似乎正在向后使用编码。文本Encoding(如 ASCII)用于将任意文本数据转换为编码(即:特殊格式)二进制数据。

(此处应包括一个警告,并非所有编码都支持所有文本字符;例如,ASCII 仅支持代码点 0-128,但这不是所示代码的主要问题)

您似乎想将任意二进制数据视为字符串 - 恰恰相反。任意二进制数据和编码文本数据。没问题:只对一些 N 使用 base-N。十六进制(base-16)可以工作,但 base-64 会更节省空间:

string encoded = Convert.ToBase64String(testByte);
byte[] decoded = Convert.FromBase64String(encoded);

推荐阅读