从字符串文本框到十六进制 0x 字节 [] c# [重复]
Posted
技术标签:
【中文标题】从字符串文本框到十六进制 0x 字节 [] c# [重复]【英文标题】:From String textBox to hex 0x byte[] c# [duplicate] 【发布时间】:2012-10-20 23:19:10 【问题描述】:可能重复:How do you convert Byte Array to Hexadecimal String, and vice versa, in C#?
我有一个输入字符串“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
,但出现无法将String
转换为byte.
的错误,而且我不必将值转换为十六进制,只需在每个字节前面添加0x
并添加到字节数组。
【问题讨论】:
这不是重复的,因为我试图应用该帖子中所说的内容,但我没有得到我需要的东西。如果我使用 16 解析或十六进制解析,我会得到其他值,而不是格式 0x,而是具有诸如“170,17,...”之类的值的数组字节,因此它将 0x11 转换为 17 十进制,但我想得到 0x11。跨度> @user1788654,看我的回答,我解释了如何根据需要显示字节 【参考方案1】: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();
【讨论】:
我试过这个解决方案,但我没有得到我想要的,我得到一个字节数组,其值如“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 = new byte[23] 0x02,0x01,0x12,0x77,0x04,0xAA,0x11,0x22,0x33,0x44,0x55,0x66,0x77 ,0x88 ,0x99 ,0xAA ,0xBB,0xCC ,0xDD ,0xEE,0xFF,0xCA,0x03。该数组的字节将被放入串口连接的输入中,这是该串口为活动注册的命令:写。所以我需要这个 0x。【参考方案2】:试试
int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);
对于字符串的每个拆分元素并将其添加到列表中。
List<Byte> bytes = new List<Byte>();
foreach (var splittedValue in hexString.Split(' '))
bytes.Add(int.Parse(splittedValue, System.Globalization.NumberStyles.HexNumber));
return bytes.ToArray();
【讨论】:
【参考方案3】:你可以使用byte.Parse
:
byte[] bytes = str.Split().Select(s => byte.Parse(s, NumberStyles.HexNumber)).ToArray();
要以十六进制表示形式显示字节,请使用 ToString 覆盖:
foreach (var b in bytes)
Console.WriteLine("0x0:X", b);
//or Console.WriteLine("0x" + b.ToString("X"));
您还可以在string.Format
中使用“X”格式及其修改。
【讨论】:
byte.Parse
默认将字符串解析为十进制,而不是十六进制,所以这行不通
@2kay 谢谢你的介绍,但我没有得到 0xAA,只有 AA。我想问你如何获得 0xAA 格式。所以我打印 0xAA 不仅是 AA,因为在我必须将这个值输入到另一个程序之后。
@user1788654,已编辑。似乎您只能通过连接字节的“0x”和十六进制表示来获得前导“0x”:(【参考方案4】:
你可以使用tostring函数
【讨论】:
这根本行不通。以上是关于从字符串文本框到十六进制 0x 字节 [] c# [重复]的主要内容,如果未能解决你的问题,请参考以下文章