gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:28:09 24 4
gpt4 key购买 nike

我有一个 String[] 十六进制"10" "0F" "3E" "42"存储。

我发现这种方法可以转换为 Byte[]

    public static byte[] ToByteArray(String HexString)
{
int NumberChars = HexString.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
{
bytes[i / 2] = Convert.ToByte(HexString.Substring(i, 2), 16);
}
return bytes;
}

然而,这会将值转换为等效的十六进制值。但是这些值已经在 hex 中了!

例如,这使得 "10" "0F" "3E" "42"进入"16" "15" "62" "66" .

我希望它直接复制值,因为它们已经是正确的十六进制值。

编辑:

基本上...

我想要一个字节数组,其中包含 String[] 中的文字字符所以说 String[] 中的第二个值是0F .我想要 Byte[] 中的第一个字节成为0F而不是 16

有什么想法吗?

编辑2

让我澄清一下。我不想转换我的 String[]值转换为十六进制,因为它们已经是十六进制。我想直接将它们复制到一个 Byte[]

问题是我的字符串值"10" "0F" "3E" 42"已经有了我想要的十六进制值。我希望字节数组包含那些确切的值而不是转换它们,它们已经是十六进制形式。

最佳答案

你必须转换(或解析)string才能得到byte,因为string byte不同的类型:

// 10 == 10d 
byte b = Convert.ToByte("10"); // if "10" is a decimal representation
// 16 == 0x10
byte b = Convert.ToByte("10", 16); // if "10" is a hexadecimal representation

如果你想处理一个数组,你可以尝试一个简单的Linq:

using System.Linq;

...

string[] hexValues = new string[] {
"10", "0F", "3E", "42"};

byte[] result = hexValues
.Select(value => Convert.ToByte(value, 16))
.ToArray();

如果要将结果打印为十六进制,请使用格式化("X2" 格式字符串 - 至少2 十六进制 数字,使用大写 字母):

// 10, 0F, 3E, 42
Console.Write(string.Join(", ", result.Select(b => b.ToString("X2"))));

相同但格式不同的数组进行比较("d2" - 至少2 十进制 位数)

// 16, 15, 62, 66 
Console.Write(string.Join(", ", result.Select(b => b.ToString("d2"))));

如果未提供格式,.Net 使用默认格式并以十进制表示 byte:

// 16, 15, 62, 66 
Console.Write(string.Join(", ", result));

关于C# 将十六进制字符串数组转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com