将字符串转换为十六进制字节数组[重复]
Posted
技术标签:
【中文标题】将字符串转换为十六进制字节数组[重复]【英文标题】:Cast string to hex byte array [duplicate] 【发布时间】:2021-04-13 07:42:10 【问题描述】:我需要将字符串转换为十六进制表示的字节数组。 例如:
值:06000002 我需要的是:
30 36 30 30 30 30 30 32
我尝试将所有字符隐式转换为字节,如下所示:
byte[] bytes = new byte[daten.Length];
for (int i = 0; i < daten.Length; i++)
int value = Convert.ToInt32(daten[i]);
bytes[i] = (byte)daten[i];
但是我总是得到这个结果:
48 54 48 48 48 48 48 50
我不需要将结果作为字符串!我需要它作为字节数组!
如何做到这一点?
【问题讨论】:
这能回答你的问题吗? Converting string to byte array in C# 48 十进制 == 0x30 十六进制。 54 == 0x36 和 50 == 0x32。您可能还想看看:***.com/questions/311165/… @Flydog57,这不是完美的骗局吗? 我将其标记为骗子。但是,从字符串到字节数组的转换使得它不是完全重复的。请注意,PeterB 在下面有一个答案,假设一个字符适合一个字节(永远不会失败)。 Jamiec 假设为 UTF-8 编码。 @Marvin,您打算如何将该字符串转换为字节数组(我注意到您有一个名为daten
的变量,我猜它是德语。一个 ß 适合一个字节(它是一个 U+00DF),但只是。很多字符不会
@Flydog57 我需要将一个字符串(只有数字,长度为 8)转换为一个字节数组,其中字节将 char 的值表示为 ascii 十六进制值。 Daten 是包含字符串的变量
【参考方案1】:
要获得所需的输出,您可以将每个字符转换为其十六进制表示:
var s = "06000002";
var bytes = s.Select(c => (byte) c);
var hexCodes = bytes.Select(b => b.ToString("X2"));
您可以在这里停下来,或者将其转换为数组或列表。
请注意,字节只是数字,没有“十六进制字节”之类的东西。 “十六进制”唯一存在的时间是在转换为字符串格式之后,就像我上面所做的那样。
要仍然将其作为一个字符串,您可以继续:
var result = string.Join(' ', hexCodes);
或一次性完成:
var result = string.Join(' ', "06000002".Select(c => ((byte) c).ToString("X2")));
【讨论】:
【参考方案2】:您只需要:
var value = "06000002";
byte[] bytes = Encoding.UTF8.GetBytes(value);
在 .NET 5 中,您可以使用
string hexString = Convert.ToHexString(bytes);
验证您的结果是否符合您的预期
3036303030303032
https://dotnetfiddle.net/6sUmgE
【讨论】:
正如我上面的问题中提到的,我不需要它作为字符串。我需要代表十六进制值的字节值本身。当我调用 GetBytes 方法时,我将字节作为 dec 值而不是 hex @MarvinKlein 很抱歉,但这没有意义。字节就是字节。没有“十六进制字节”或“十进制字节”之类的东西。当您表示该数据时,您可以使用以 10(十进制)或以 16(十六进制)为基数或您喜欢的任何其他编号系统。以上是关于将字符串转换为十六进制字节数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章