【问题标题】:Convert character to CP1252 Hex in c#在c#中将字符转换为CP1252 Hex
【发布时间】:2017-02-15 16:41:30
【问题描述】:

我编写了一个函数来将字符串转换为十六进制字符串。所以“abc”将被转换为“616263”。

函数如下:

    private string StringToHex(string myString)
    {
        int ctr, li_max;
        string ls_hex = "";

        li_max = myString.Length;
        for(ctr = 0; ctr < li_max; ctr++)
            ls_hex = ls_hex + (Convert.ToInt16(myString[ctr])).ToString("x2");

        return ls_hex;
    }

但是,当我有像“‹abc”这样的 unicode 字符时,我会得到“2039616263”。所以我的第一个字符被转换为 2039 (unicode)。我想得到“8B616263”(CP1252)。见下图:

如何获得正确编码的十六进制值?
即:8B 而不是 2039

【问题讨论】:

  • 一旦字符串编码错误,您将无法恢复。因此,无论读取 byte[] 数组并转换为字符串的代码都必须修复以使用正确的编码。可能是读取需要修复的文件的代码。

标签: c# character-encoding


【解决方案1】:

你需要使用 CP1252 编码来获取字符串的字节数:

private string StringToHex(string myString)
{
    byte[] bytes = Encoding.GetEncoding(1252).GetBytes(myString);
    return string.Concat(bytes.Select(b => b.ToString("X2")));
}

我的输出是

8B616263

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 2021-09-05
    • 1970-01-01
    • 2014-01-27
    相关资源
    最近更新 更多