我正在研究网络转换(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);
}
任何建议都将受到赞赏。
答案 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);
你可以用它。我希望它对你有用。