将字符串转换为十六进制字节数组[重复]

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(十六进制)为基数或您喜欢的任何其他编号系统。

以上是关于将字符串转换为十六进制字节数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串转换为十六进制字节数组? [复制]

字节数组到十六进制字符数组的转换[重复]

从字节数组转换为字符串十六进制c# [重复]

十六进制字符串到字节数组 C# [重复]

如何将十六进制字符串转换为字节数组? [复制]

将十六进制字符串转换为字节数组