将十六进制代码转换为文本c#十六进制字符串与另一页不同

时间:2017-06-26 02:17:47

标签: c#

我正在研究网络转换(unicode)代码,但结果不是我想要的。

作为参考,这是我想要实现的目标:http://www.unit-conversion.info/texttools/hexadecimal/

E.g。 输入“E5BC B5E6 9F8F E6A6 86”,收到“张柏榆”< -----这就是我需要的东西

但我使用以下参考代码

public static string ConvertStringToHex(String input, System.Text.Encoding encoding)
{
    Byte[] stringBytes = encoding.GetBytes(input);
    StringBuilder sbBytes = new StringBuilder(stringBytes.Length * 2);
    foreach (byte b in stringBytes)
    {
        sbBytes.AppendFormat("{0:X2}", b);
    }
    return sbBytes.ToString();
}

我得到十六进制字符串“355F CF67 8669”

它不会将十六进制代码转换为“张柏榆”。

public static string ConvertHexToString(String hexInput, System.Text.Encoding encoding)
{
    int numberChars = hexInput.Length;
    byte[] bytes = new byte[numberChars / 2];
    for (int i = 0; i < numberChars; i += 2)
    {
        bytes[i / 2] = Convert.ToByte(hexInput.Substring(i, 2), 16);
    }
    return encoding.GetString(bytes);
}

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

我尝试了你的功能,但在尝试转换时确实出错了。奇怪的是,当我尝试使用字符串“E5BCB5E69F8FE6A686”(没有空格的字符串)时,它起作用了。

您可以修改代码以自动替换空格,我还添加了一行以删除任何“ - ”符号(如果包含它们):

public static string ConvertHexToString(String hexInput, System.Text.Encoding encoding)
{
    hexInput = hexInput.Replace(" ", "").Replace("-", "");      //Edited here to not declare a new string, suggested by Clonkex in comment
    int numberChars = hexInput.Length;
    byte[] bytes = new byte[numberChars / 2];
    for (int i = 0; i < numberChars; i += 2)
    {
        bytes[i / 2] = Convert.ToByte(hexInput.Substring(i, 2), 16);
    }
    return encoding.GetString(bytes);
}

答案 1 :(得分:0)

您只能使用System.Text.Encoding.UTF8

string temp = ConvertStringToHex("張柏榆", System.Text.Encoding.UTF8);
string temp1 = ConvertHexToString(temp, System.Text.Encoding.UTF8);

你可以用它。我希望它对你有用。