2011-10-24 144 views
8

可能重复:
How do you convert Byte Array to Hexadecimal String, and vice versa, in C#?
Convert hex string to byte array字符串字节数组

我像这样的字符串: “021500010000146DE6D800000000000000003801030E9738”

我需要的是以下字节数组: 02 15 00 01 00 00 14 6D E6 D 8 00 00 00 00 00 00 00 00 38 01 03 0E 97 38(每对数字是相应字节中的十六进制值)。

有关如何进行此转换的任何想法?谢谢!!

+0

你写的做一些事情? –

+1

“可能的重复”是完全不同的问题。他没有问如何使用某种编码将字符串编码到“byte []”中。这里的字符串包含应该转换为byte []的十六进制值。 – svick

+0

我不明白这些问题是如何重复的。 – vcsjones

回答

5
var arr = new byte[s.Length/2]; 
for (var i = 0 ; i<arr.Length ; i++) 
    arr[i] = (byte)Convert.ToInt32(s.SubString(i*2,2), 16); 
+0

此代码确实运行良好。但只有一个细节,正确的代码是“s.Substring”。 感谢所有。 – Manu

+0

可以使用Convert.ToByte而不是ToInt32。 – mikeazo

1

你几乎想要这个page的第二个例子。
重要的部分是:

Convert.ToInt32(hex, 16); 

第一个参数是一个2字符的串,指定一个十六进制值(例如"DE")。
第二个参数指定从十六进制的Base-16转换。

将字符串拆分为两个字符的段在示例中未显示,但对于您的问题是必需的。我相信它很简单,可以让你处理。

我发现这与Google: "C# parse hex"

1
string str = "021500010000146DE6D800000000000000003801030E9738"; 
    List<byte> myBytes = new List<byte>(); 

    try 
    { 
     while (!string.IsNullOrEmpty(str)) 
     { 
      myBytes.Add(Convert.ToByte(str.Substring(0, 2), 16)); 
      str = str.Substring(2); 
     } 
    } 
    catch (FormatException fe) 
    { 
     //handle error 
    } 
    for(int i = 0; i < myBytes.Count; i++) 
    { 
     Response.Write(myBytes[i].ToString() + "<br/>"); 
    } 
+0

'Convert.ToByte' on一个'int'?我的意思是,过早优化是不好的,但所有的,但最简单的方法也更快... –

+0

@BenVoigt啊,我发现正确的功能在一个转换。谢谢! –