我正在寻找一种将十六进制字节值字符串转换为“真实文本”字符串(ASCII字符)的智能方法。
例如,我用十六进制ASCII:48 45 4C 4C 4F写的“Hello”一词。并且使用某种方法我想接收它的ASCII文本(在本例中为“Hello”)。
// I have this string (example: "Hello") and want to convert it to "Hello".
string strHexa = "48454C4C4F";
// I want to convert the strHexa to an ASCII string.
string strResult = ConvertToASCII(strHexa);
我确信有一种框架方法。如果情况不是这样,我可以实现自己的方法。
谢谢!
答案 0 :(得分:2)
var str = Encoding.UTF8.GetString(SoapHexBinary.Parse("48454C4C4F").Value); //HELLO
PS:SoapHexBinary
位于System.Runtime.Remoting.Metadata.W3cXsd2001
名称空间
答案 1 :(得分:2)
我确信有一种框架方法。
单个框架方法:否。
然而,第二部分:将包含ASCII编码文本的字节数组转换为.NET string
(UTF-16编码的Unicode)确实存在:System.Text.ASCIIEncoding
,特别是方法{{ 3}}:
string result = ASCIIEncoding.GetString(byteArray);
第一部分很容易做到自己:一次取两个十六进制数字,解析为十六进制并转换为byte
以存储在数组中。像这样的东西:
byte[] HexStringToByteArray(string input) {
Debug.Assert(input.Length % 2 == 0, "Must have two digits per byte");
var res = new byte[input.Length/2];
for (var i = 0; i < input.Length/2; i++) {
var h = input.Substring(i*2, 2);
res[i] = Convert.ToByte(h, 16);
}
return res;
}
编辑:注意:GetString
标识.NET中的一个方法,它可以更轻松地完成第一部分:这是一种更好的方法,可以自己编写(在或许,模糊的命名空间它是在mscorlib中实现的,而不需要额外的引用。)
答案 2 :(得分:0)
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hexStr.Length; i += 2)
{
string hs = hexStr.Substring(i, 2);
sb.Append(Convert.ToByte(hs, 16));
}