从十六进制转换为字符串
我需要检查以 byte
数组形式收到的数据包内是否存在 string
。 如果我使用 BitConverter.ToString()
,我会得到带破折号的 string
字节 (fe: 00-50-25-40-A5-FF)。
我尝试了快速谷歌搜索后找到的大多数函数,但大多数函数都有输入参数类型 string
,如果我用带破折号的 string
调用它们,它会抛出异常。
我需要一个将十六进制(作为字符串
或作为字节
)转换为表示十六进制值的字符串
的函数(fe:0x31 = 1) 。 如果输入参数为字符串
,则该函数应识别破折号(例如“47-61-74-65-77-61-79-53-65-72-76-65-72”),因为 BitConverter
无法正确转换。
I need to check for a string
located inside a packet that I receive as byte
array. If I use BitConverter.ToString()
, I get the bytes as string
with dashes (f.e.: 00-50-25-40-A5-FF).
I tried most functions I found after a quick googling, but most of them have input parameter type string
and if I call them with the string
with dashes, It throws an exception.
I need a function that turns hex(as string
or as byte
) into the string
that represents the hexadecimal value(f.e.: 0x31 = 1). If the input parameter is string
, the function should recognize dashes(example "47-61-74-65-77-61-79-53-65-72-76-65-72"), because BitConverter
doesn't convert correctly.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
像这样吗?
Like so?
对于 Unicode 支持:
For Unicode support:
您可以在 -
处分割字符串
将文本转换为整数 (int.TryParse)
将 int 输出为十六进制字符串 {0:x2}
You can split the string at the -
Convert the text to ints (int.TryParse)
Output the int as a hex string {0:x2}
来自 https://msdn.microsoft.com/en-us/library/bb311038 .aspx
From https://msdn.microsoft.com/en-us/library/bb311038.aspx
您对“0x31 = 1”的引用让我认为您实际上是在尝试将 ASCII 值转换为字符串 - 在这种情况下您应该使用类似 Encoding.ASCII.GetString(Byte[]) 的东西
Your reference to "0x31 = 1" makes me think you're actually trying to convert ASCII values to strings - in which case you should be using something like Encoding.ASCII.GetString(Byte[])
如果您需要将结果作为字节数组,则应该直接传递它,而不将其更改为字符串,然后将其更改回字节。
在您的示例中, (fe:
0x31 = 1
) 是 ASCII 代码。 在这种情况下,要将字符串(十六进制值)转换为 ASCII 值,请使用:Encoding.ASCII.GetString(byte[])
控制台会显示:1234567890
If you need the result as byte array, you should pass it directly without changing it to a string, then change it back to bytes.
In your example the (f.e.:
0x31 = 1
) is the ASCII codes. In that case to convert a string (of hex values) to ASCII values use:Encoding.ASCII.GetString(byte[])
The console will display: 1234567890
我的 Net 5 解决方案还在末尾处理空字符:
My Net 5 solution that also handles null characters at the end:
单线:
One-liners: