在 C# 中将字符串转换为 ByteArray

问题描述 投票:0回答:3

我想在 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?

c# arrays encoding byte ascii
3个回答
0
投票

我希望对你有帮助:

从字符串中获取字节数组

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);
}

0
投票

对于特定的输入,这种 BigEndianUnicode 编码似乎工作正常

byte[] strTemp = Encoding.BigEndianUnicode.GetBytes(strData);

MessageBox.Show(strData);
MessageBox.Show(Encoding.BigEndianUnicode.GetString(strTemp));

`


0
投票

您将获得字符串的 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)。

© www.soinside.com 2019 - 2024. All rights reserved.