如何将一个字符串转换为C#无符号整数32位的字节数组

4

我有一个字符串,像这样:"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);
    }

但似乎它不起作用。我在一开始将字符串转换为无符号int32时遇到错误。

任何帮助将不胜感激

3个回答

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);

在观察窗口中,虽然arr[i]是字符串"0x5D",但仍然出现类型错误:"输入字符串格式不正确。" - Miroo
谢谢,我使用了您的解决方案与LC的解决方案,它能够工作。你的缺少了下标部分。 - Miroo

0

您必须明确指定AllowHexSpecifier(或HexNumber - 有关详细信息,请参见下面的文档)。此外,要传递给Parse的十六进制字符串不能具有0x前缀,因此您首先必须将其剥离。

来自MSDN文档

表示数字字符串表示十六进制值。有效的十六进制值包括数字0-9和十六进制数字A-F和a-f。十六进制值可以左填零。不允许使用此样式前缀为“0x”的字符串。

所以尝试:

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

此外,不确定为什么在字符串上调用了额外的 ToString...

另外,您提到使用无符号整数。您是指使用 UInt32 吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接