C中十六进制字符串到字节数组

作者:编程家 分类: c++ 时间:2025-09-01

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

在C语言中,有时我们需要将十六进制字符串转换为字节数组。这在处理网络数据、加密算法或者进行数据传输时非常常见。本文将介绍一种将十六进制字符串转换为字节数组的方法,并提供一个简单的案例代码来说明。

方法

要将十六进制字符串转换为字节数组,我们需要遵循以下步骤:

1. 首先,我们需要将十六进制字符串中的每个字符拆分开来。每个字符对应四位二进制数,所以我们将字符串中的每个字符转换为对应的二进制数。

2. 接下来,我们将这些二进制数按照字节进行分组。每个字节由八位二进制数组成。

3. 最后,我们将这些字节转换为十进制数,并存储在字节数组中。

下面是一个简单的案例代码,演示了如何将十六进制字符串转换为字节数组:

c

#include

#include

#include

// 将十六进制字符转换为对应的整数

int hexToInt(char hexChar) {

if (hexChar >= '0' && hexChar <= '9') {

return hexChar - '0';

}

else if (hexChar >= 'a' && hexChar <= 'f') {

return hexChar - 'a' + 10;

}

else if (hexChar >= 'A' && hexChar <= 'F') {

return hexChar - 'A' + 10;

}

else {

return -1; // 非法字符

}

}

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

void hexStringToByteArray(const char* hexString, unsigned char* byteArray, int byteArrayLength) {

int hexStringLength = strlen(hexString);

if (hexStringLength % 2 != 0 || hexStringLength / 2 > byteArrayLength) {

return; // 非法输入

}

for (int i = 0; i < hexStringLength; i += 2) {

int highNibble = hexToInt(hexString[i]);

int lowNibble = hexToInt(hexString[i + 1]);

if (highNibble == -1 || lowNibble == -1) {

return; // 非法输入

}

byteArray[i / 2] = (highNibble << 4) | lowNibble;

}

}

int main() {

const char* hexString = "48656c6c6f20576f726c64";

int byteArrayLength = strlen(hexString) / 2;

unsigned char* byteArray = (unsigned char*)malloc(byteArrayLength * sizeof(unsigned char));

hexStringToByteArray(hexString, byteArray, byteArrayLength);

for (int i = 0; i < byteArrayLength; i++) {

printf("%02x ", byteArray[i]);

}

printf("\n");

free(byteArray);

return 0;

}

案例说明

上述代码中,我们定义了两个函数:`hexToInt`和`hexStringToByteArray`。

`hexToInt`函数用于将十六进制字符转换为对应的整数。它首先判断字符是否合法,然后根据字符的范围返回对应的整数值。

`hexStringToByteArray`函数是主要的转换函数。它首先检查输入字符串的长度是否合法,然后遍历字符串中的每个字符。在每个字符的处理过程中,它先将字符转换为对应的整数值,然后将高位和低位合并为一个字节,并存储在字节数组中。

在主函数中,我们使用一个示例的十六进制字符串进行测试。我们首先计算字节数组的长度,然后动态分配内存空间。接下来,我们调用`hexStringToByteArray`函数进行转换,并打印转换结果。

本文介绍了一种在C语言中将十六进制字符串转换为字节数组的方法,并提供了一个简单的案例代码来说明。这种方法在处理网络数据、加密算法或数据传输时非常有用。希望本文能对你有所帮助!