从字符串文本框到十六进制0x字节[]c#

从字符串文本框到十六进制0x字节[]c#,c#,hex,bytearray,C#,Hex,Bytearray,可能重复: 我有一个文本框,输入字符串“AA 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF”,我将其拆分为字符串[],但现在我必须得到一个字节[],如下所示: byte[] b6 = new byte[20] {0xAA,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88 ,0x99 ,0xAA ,0xBB,0xCC ,0xDD ,0xEE,0xFF}; 有人能建议我怎么做吗。我尝试使用Convert.ToByte,但是

可能重复:

我有一个文本框,输入字符串“AA 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF”,我将其拆分为字符串[],但现在我必须得到一个字节[],如下所示:

byte[] b6 = new byte[20] {0xAA,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88 ,0x99 ,0xAA ,0xBB,0xCC ,0xDD ,0xEE,0xFF};

有人能建议我怎么做吗。我尝试使用
Convert.ToByte
,但是我得到了一个错误,无法将
字符串
转换为
字节。
并且我不必转换十六进制值,只需在每个字节前面添加
0x
,并添加到字节数组。

您可以使用
字节。解析

byte[] bytes = str.Split().Select(s => byte.Parse(s, NumberStyles.HexNumber)).ToArray();
要以十六进制表示形式显示字节,请使用ToString override:

foreach (var b in bytes)
{
    Console.WriteLine("0x{0:X}", b);
    //or Console.WriteLine("0x" + b.ToString("X"));
}
您还可以在
string.format

中使用“X”格式及其修改

string input = "AA 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF";
byte[] bytes = input.Split().Select(s => Convert.ToByte(s, 16)).ToArray();
用于字符串中每个拆分的元素,并将其添加到列表中

List<Byte> bytes = new List<Byte>();
foreach (var splittedValue in hexString.Split(' ')) {
    bytes.Add(int.Parse(splittedValue, System.Globalization.NumberStyles.HexNumber));
} 
return bytes.ToArray();
List bytes=新列表();
foreach(hexString.Split(“”)中的var splittedValue){
Add(int.Parse(splittedValue,System.Globalization.NumberStyles.HexNumber));
} 
返回bytes.ToArray();

您可以使用function

byte。Parse
默认情况下将字符串解析为十进制,而不是十六进制,因此这不会work@2kay谢谢你的陈述,但我没有得到0xAA,只有AA。我想问你如何获得0xAA格式。所以我打印0xAA而不仅仅是AA,因为我必须在另一个过程的输入中获得这个值。@user1788654,编辑。似乎只有通过连接字节的“0x”和十六进制表示才能得到前导“0x”:(这不是重复的,因为我试图应用那篇文章中所说的东西,但没有得到我需要的。如果我提供16解析或十六进制解析,我会得到其他值,不是格式0x,而是数组字节,值为“170,17,…”所以它将0x11转换为17位小数,但我想得到0x11。@user1788654,请看我的答案,我解释了如何在您想要的时候显示字节我尝试了这个解决方案,但我没有得到我想要的,我得到了一个值为“170,17,…”的字节数组所以它将11转换为17。但我想得到0x11。我知道11是十进制的17,但我需要十六进制格式来输入到读卡器。我需要得到输入:“AA 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF”和输出字节数组中具有相同的值,只有“0x”在每个位的前面。@user1788654,0x11与17相同……它们只是相同值(十六进制和十进制)的不同表示形式。说它是0x11是没有意义的;这只是代码中使用的一种表示法,在运行时,值不是表示为0x11或17,而是表示为二进制(00010111)。你到底想实现什么?我有一个数组字节:byte[]b6=新字节[23]{0x02,0x01,0x12,0x77,0x04,0xAA,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,0xCA,0x03}。此数组的字节将被输入到serialport连接中,此串行端口为“活动:写入”注册此命令。因此我需要此0x。这根本不起作用。
List<Byte> bytes = new List<Byte>();
foreach (var splittedValue in hexString.Split(' ')) {
    bytes.Add(int.Parse(splittedValue, System.Globalization.NumberStyles.HexNumber));
} 
return bytes.ToArray();