C#ByteString到ASCII字符串

时间:2014-02-12 10:40:34

标签: c# .net bytearray

我正在寻找一种将十六进制字节值字符串转换为“真实文本”字符串(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);

我确信有一种框架方法。如果情况不是这样,我可以实现自己的方法。

谢谢!

3 个答案:

答案 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));
    }