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

2 c# arrays hex

我存储了一个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;
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑:

基本上...

我想要一个带有文字字符的字节数组String[]所以说第二个值String[]0F。我希望第一个字节是Byte[]0F不是 16

有任何想法吗?

编辑2

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

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

Dmi*_*nko 6

您必须转换(或解析string才能获得因为bytestringbyte不同的类型

// 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
Run Code Online (Sandbox Code Playgroud)

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

using System.Linq;

...

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

byte[] result = hexValues
  .Select(value => Convert.ToByte(value, 16))
  .ToArray();
Run Code Online (Sandbox Code Playgroud)

result如果您想以十六进制打印,请使用格式("X2"格式字符串 - 至少2 十六进制数字,使用大写字母):

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

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

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

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

// 16, 15, 62, 66 
Console.Write(string.Join(", ", result));
Run Code Online (Sandbox Code Playgroud)