从字符串文本框到十六进制 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# [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C# 2.0 中的十六进制到字节 []

理解 C# 中的十六进制和字节

C# 在表示字符串的大字节数组中寻找子数组

C# 将字符转换为字节(十六进制表示)

C# windows窗体中的文本框到数组声明

在C#中将十六进制字符串转换为其数值[重复]