C# “转换字符串”;0x32";转换为单个字节

C# “转换字符串”;0x32";转换为单个字节,c#,C#,我正在使用C#尝试将字符串值转换为字节。似乎比我想象的要难。基本上,我有一个名为hex=“0x32”的字符串,需要字节块来等于这个值 string hex = "0x32"; byte block = Convert.ToByte(hex); 上述方法不起作用,有人知道我如何成功地将十六进制值分配给字节吗。我需要在代码后面将此字节附加到字节数组中。请尝试以下操作 byte block = Byte.Parse(hex.SubString(2), NumberStyles.HexNumber);

我正在使用C#尝试将字符串值转换为字节。似乎比我想象的要难。基本上,我有一个名为hex=“0x32”的字符串,需要字节块来等于这个值

string hex = "0x32";
byte block = Convert.ToByte(hex);
上述方法不起作用,有人知道我如何成功地将十六进制值分配给字节吗。我需要在代码后面将此字节附加到字节数组中。

请尝试以下操作

byte block = Byte.Parse(hex.SubString(2), NumberStyles.HexNumber);
调用
子字符串的原因是从字符串中删除前面的“0x”。即使指定了
NumberStyles.HexNumber
,解析函数也不需要“0x”前缀,如果遇到此前缀,将出错

    string hex = "0x32";
    int value = Convert.ToInt32(hex, 16);
    byte byteVal = Convert.ToByte(value);
将工作

编辑

一段小代码来演示0x32(十六进制)和50(整数)是相同的

    string hex = "0x32";
    byte[] byteVal = new byte[1];
    byteVal[0] = Convert.Byte(hex, 16);
    Console.WriteLine(byteVal[0] + " - Integer value");
    Console.WriteLine(BitConverter.ToString(byteVal) + " - BitArray representation");;

不是答案,但数组不允许在c#中追加。您可能想试试列表。@JaredPar,“我需要在代码后面将这个字节附加到一个字节数组中。谢谢!”@James,请仔细阅读。这些示例只需将十六进制值转换为十进制格式,然后将十进制值赋给字节。所以32=50(十进制),但问题是我有一个字节数组需要以这种格式发送:byte[]cmd={0x02,0x05,0x01,0x41,0x23,0x10,block,checksum};根据输入的值,块需要等于0x32作为一个字节。。。因此,如果选择了50,我将其转换为0x32作为字符串,但需要将其分配给字节。它不能是50,因为通过串行端口发送了错误的命令。@bl4kh4k数字是一个数字,不管用什么基表示它
byteval=0x32
的作用与
byteval=50
相同。这些示例只是将十六进制值转换为十进制格式,然后将十进制值分配给字节。所以32=50(十进制),但问题是我有一个字节数组需要以这种格式发送:byte[]cmd={0x02,0x05,0x01,0x41,0x23,0x10,block,checksum};根据输入的值,块需要等于0x32作为一个字节。。。因此,如果选择了50,我将其转换为0x32作为字符串,但需要将其分配给字节。它不能是50,因为通过串行端口发送了错误的命令。@bl4kh4k查看已编辑的代码片段。您将看到输出显示50(int)和0x32(hex)是相同的,这取决于值的可视化方式(通过VS2010可视化工具)。这些示例只是将十六进制值转换为十进制格式,然后将十进制分配给字节。所以32=50(十进制),但问题是我有一个字节数组需要以这种格式发送:byte[]cmd={0x02,0x05,0x01,0x41,0x23,0x10,block,checksum};根据输入的值,块需要等于0x32作为一个字节。。。因此,如果选择了50,我将其转换为0x32作为字符串,但需要将其分配给字节。它不可能是50,因为通过串行端口发送了错误的命令。@bl4kh4k:听起来你的问题不在于十六进制转换。
Convert.ToByte(hex, 16)