2010-05-27 30 views
4

我有一个字符串,如"0x5D, 0x50, 0x68, 0xBE, 0xC9, 0xB3, 0x84, 0xFF"。 我想把它转换成:我如何将一个字符串转换为无符号整数32的字节[C]#

byte[] key= new byte[] { 0x5D, 0x50, 0x68, 0xBE, 0xC9, 0xB3, 0x84, 0xFF}; 

我想过通过,然后在其上和setValue方法循环分裂串到另一个byte[]i

string Key = "0x5D, 0x50, 0x68, 0xBE, 0xC9, 0xB3, 0x84, 0xFF"; 

    string[] arr = Key.Split(','); 
    byte[] keybyte= new byte[8]; 
    for (int i = 0; i < arr.Length; i++) 
    { 
     keybyte.SetValue(Int32.Parse(arr[i].ToString()), i); 
    } 

指数,但好像它不工作。我在第一次开始将字符串转换为无符号int32时出错。

任何帮助,将不胜感激

回答

5

你可以这样做:

byte[] data = 
    Key 
    .Split(new string[]{", "}, StringSplitOptions.None) 
    .Select(s => Byte.Parse(s.Substring(2), NumberStyles.HexNumber)) 
    .ToArray(); 
3
keybyte[i] = byte.Parse(arr[i].Trim().Substring(2), NumberStyles.HexNumber, CultureInfo.InvariantCulture); 
+0

仍然得到错误类型“输入字符串的不正确格式。”虽然它是ARR [i] \t“0x5D”\t在手表中的字符串:S – Miroo 2010-05-27 10:22:53

+0

你是对的 - 我编辑它 - ARR [我] .Substring(2) – 2010-05-27 10:31:56

+0

well thanx我用你的解决方案与LC解决方案,它的工作。 urs错过了下标部分 – Miroo 2010-05-27 11:30:47

0

你必须明确地指定AllowHexSpecifier(或HexNumber - 详情见下文的文档)。此外,要传递给Parse的十六进制字符串不能有0x前缀,因此您必须先将其除去。

MSDN Documentation

指示数字串表示十六进制值。有效的十六进制值包括数字0-9和十六进制数字A-F和a-f。十六进制值可以用零填充。使用这种风格解析的字符串不允许以“0x”作为前缀。

所以尝试:

Int32.Parse(arr[i].Substring(2), 
    System.Globalization.NumberStyles.AllowHexSpecifier) 

另外,你提到使用一个无符号整数。你的意思是用UInt32代替吗?

另外,不知道为什么你在string调用额外的ToString ...

+0

它像魅力一样工作,thanx – Miroo 2010-05-27 12:26:29

相关问题