我想在 C# 中将 String 转换为 ByteArray 以解密一些数据。
当我从创建的 ByteArray 中获取 de String 时,它显示问号(?)。
示例代码:
byte[] strTemp = Encoding.ASCII.GetBytes(strData);
MessageBox.Show(strData);
MessageBox.Show(Encoding.ASCII.GetString(strTemp));
字符串是“Ê<,,l"x¡" (With the double quotation mark) and the result to convert again to string is: ???l?x?
我希望这对你有帮助:
从字符串中获取字节数组
private byte[] StringToByteArray(string str)
{
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
return enc.GetBytes(str);
}
从字节数组获取字符串:
private string ByteArrayToString(byte[] arr)
{
System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
return enc.GetString(arr);
}
对于特定的输入,这种 BigEndianUnicode 编码似乎工作正常
byte[] strTemp = Encoding.BigEndianUnicode.GetBytes(strData);
MessageBox.Show(strData);
MessageBox.Show(Encoding.BigEndianUnicode.GetString(strTemp));
`
您将获得字符串的 ASCII 表示形式的字节数组,但您的字符串是 Unicode。
C# 使用 Unicode 来编码字符串,Unicode 能够将更多的符号表示为 ASCII。
在您的示例中,每个没有 ASCII 表示的符号都被替换为“?”,这就是为什么输出中只出现“l”和“x”。
正确的方法是使用 Unicode 编码:
byte[] strTemp = Encoding.UTF8.GetBytes(strData);
MessageBox.Show(strData);
MessageBox.Show(Encoding.UTF8.GetString(strTemp));
基本上,可以使用任何 Unicode 编码:UTF8、UTF32、Unicode、BigEndianUnicode (https://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings)。