我有一个像"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时出错。
任何帮助将不胜感激
答案 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前缀,因此您必须先将它们删除。
表示数字字符串表示十六进制值。有效的十六进制值包括数字0-9和十六进制数字A-F和a-f。十六进制值可以用零填充。使用此样式解析的字符串不允许带有“0x”前缀。
所以试试:
Int32.Parse(arr[i].Substring(2),
System.Globalization.NumberStyles.AllowHexSpecifier)
另外,您提到使用无符号整数。您的意思是使用UInt32
吗?
此外,不确定为什么要在ToString
上拨打额外的string
...