我有像“74657374696e67”(即“测试”)这样的字符串,十六进制编码的unicode文本。需要将其转换回可读输出。 如何在.NET中执行此操作?
更新
该文本最初使用以下Visual Basic 6函数进行编码:
Public Function EnHex(Data As String) As String
Dim iCount As Double, sTemp As String
Reset
For iCount = 1 To Len(Data)
sTemp = Hex$(Asc(Mid$(Data, iCount, 1)))
If Len(sTemp) < 2 Then sTemp = "0" & sTemp
Append sTemp
Next
EnHex = GData
Reset
End Function
解码如下:
Public Function DeHex(Data As String) As String
Dim iCount As Double
Reset
For iCount = 1 To Len(Data) Step 2
Append Chr$(Val("&H" & Mid$(Data, iCount, 2)))
Next
DeHex = GData
Reset
End Function
答案 0 :(得分:0)
有趣的问题。
谷歌搜索了一下我在VB.NET中找到了这个Function FromHex(ByVal Text As String) As String
If Text Is Nothing OrElse Text.Length = 0 Then
Return String.Empty
End If
Dim Bytes As New List(Of Byte)
For Index As Integer = 0 To Text.Length - 1 Step 2
Bytes.Add(Convert.ToByte(Text.Substring(Index, 2), 16))
Next
Dim E As System.Text.Encoding = System.Text.Encoding.Unicode
Return E.GetString(Bytes.ToArray)
End Function
答案 1 :(得分:0)
var myString = System.Text.Encoding.UTF8.GetString(DecodeHexString("74657374696e67"));
public static byte[] DecodeHexString(string str)
{
uint num = (uint) (str.Length / 2);
byte[] buffer = new byte[num];
int num2 = 0;
for (int i = 0; i < num; i++)
{
buffer[i] = (byte) ((HexToByte(str[num2]) << 4) | HexToByte(str[num2 + 1]));
num2 += 2;
}
return buffer;
}
private static byte HexToByte(char val)
{
if ((val <= '9') && (val >= '0'))
{
return (byte) (val - '0');
}
if ((val >= 'a') && (val <= 'f'))
{
return (byte) ((val - 'a') + 10);
}
if ((val >= 'A') && (val <= 'F'))
{
return (byte) ((val - 'A') + 10);
}
return 0xff;
}
答案 2 :(得分:0)
在我看来,EnHex和DeHex假设原始字符串中的字符是ascii编码的,或者编码在其他字符集中,其中所有字符都在0-255范围内。因此,所有字符都可以用两个字符的十六进制数表示。以下.NET(C#)代码将解码您的十六进制编码字符串:
public string DecodeHex(string input)
{
if (input.Length % 2 == 1)
throw new ArgumentException("Invalid hex encoded string.");
int len = input.Length / 2;
StringBuilder output = new StringBuilder(len);
for (int c = 0; c < len; ++c)
output.Append((char)System.Convert.ToByte(input.Substring(c*2, 2), 16));
return output.ToString();
}
这正是online hex decoder正在做的事情。用它来测试你的结果和期望。
答案 3 :(得分:0)
只需使用Chr([hex code, e.g. &H74])
即可。唯一的问题是,在使用此解决方案之前,您需要自己解析代码。如果你有unicode字符,请使用ChrW()
。
http://msdn.microsoft.com/en-us/library/613dxh46(v=vs.71).aspx