C#如何将unHex转换为String
c#
我正在尝试将 unHex 值转换为字符串,但它不起作用。
我有以下价值 0x01BB92E7F716F55B144768FCB2EA40187AE6CF6B2E52A64F7331D0539507441F7D770112510D679F0B310116B0D709E049A19467672FFA532A7C30DFB72
结果我希望是这样
但是执行下面的函数会显示这个结果
»’ Ç ÷ õ [Ghü²ê @ zæÏk.R¦Os1ÐS • D} w Q gŸ 1 ° × àI¡ ”gg / úS * | 0ß ·) = ¤
知道如何按预期提取信息
public static string Hex2String (string input)
{
var builder = new StringBuilder ();
for (int i = 0; i < socketLength; i + = 2)
{
// throws an exception if not properly formatted
string hexdec = input.Substring (i, 2);
int number = Int32.Parse (hexdec, NumberStyles.HexNumber);
char charToAdd = (char) number;
builder.Append (charToAdd);
}
return builder.ToString ();
}
回答
您的结果是 base64 编码的。Base64是一种将字节数组转换为人类可读字符的方法。
您的代码尝试获取这些原始字节并将它们转换为字符,但并非所有字节值都是有效的可打印字符:有些是控制字符,有些无法打印,等等。
相反,让我们将十六进制字符串转换为字节数组,然后将该字节数组转换为 base64 字符串。
string input = "01BB92E7F716F55B144768FCB2EA40187AE6CF6B2E52A64F7331D0539507441F7D770112510D679F0B310116B0D709E049A19467672FFA532A7C30DFB72";
byte[] bytes = new byte[input.Length / 2];
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = byte.Parse(input.Substring(i * 2, 2), NumberStyles.HexNumber);
}
string result = Convert.ToBase64String(bytes);
这导致:
AbuS5/cW9VsUR2j8supAGHrmz2suUqZPczHQU5UHRB99dwESUQ1nnwsxARaw1wngSaGUZ2cv+lMqfDDftw==
看到它在这里运行。