如何将字符串转换为无符号int 32 C#的byte []

时间:2010-05-27 10:11:02

标签: c# bytearray

我有一个像"0x5D, 0x50, 0x68, 0xBE, 0xC9, 0xB3, 0x84, 0xFF"这样的字符串。 我想把它转换成:

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

我考虑过按,分割字符串,然后循环播放它,将值设置为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);
    }

但似乎不起作用。我在第一次开始时将字符串转换为unsigned int32时出错。

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:5)

你可以这样做:

byte[] data =
  Key
  .Split(new string[]{", "}, StringSplitOptions.None)
  .Select(s => Byte.Parse(s.Substring(2), NumberStyles.HexNumber))
  .ToArray();

答案 1 :(得分:3)

keybyte[i] = byte.Parse(arr[i].Trim().Substring(2), NumberStyles.HexNumber, CultureInfo.InvariantCulture);

答案 2 :(得分: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吗?

此外,不确定为什么要在ToString上拨打额外的string ...