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

标签 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;
    }

然而,这会将值转换为等效的十六进制值。但是这些值已经在 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/

相关文章:

c# - 如何修改 OpenXML TableCell 的前景色和背景色?

java - 具有不同表达式类型的嵌套开关: ArrayIndexOutOfBoundsException -4

java - 移动二维矩阵中的所有零

c - 在 C 中使用 sprintf 进行十六进制到十进制的转换

c# - 类中的静态字段 - 是否为每个静态方法调用重新实例化?

c# - 角度theta计算错误

c# - 如何在 operator== 方法中检查 null?

java - System.arraycopy 返回 arrayoutofboundsexception

java - 将 11 字节十六进制字符串转换为大小为 16 的字节数组

c++ - 在 C++ 中用前导零更改十六进制数的位,(C)