C语言将一串字符串拼接为2位16进制数组
时间: 2024-02-01 22:16:43 浏览: 120
假设你有一个字符串 `str`,其长度为 `len`,你想将其拼接成一个长度为 `len/2` 的 16 进制数组 `hex`,可以按照以下步骤进行:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char str[] = "54686520717569636b2062726f776e20666f78206a756d70"; // 输入的字符串
int len = strlen(str); // 获取字符串长度
if (len % 2 != 0) { // 长度必须为偶数,否则无法拼接为 16 进制数
printf("Invalid length\n");
return 1;
}
int hex_len = len / 2; // 计算拼接后的 16 进制数组长度
unsigned char *hex = (unsigned char *)malloc(hex_len * sizeof(unsigned char)); // 动态分配内存
for (int i = 0; i < hex_len; i++) {
char byte_str[3] = {str[i*2], str[i*2+1], '\0'}; // 获取两个字符组成的字节串
hex[i] = (unsigned char)strtol(byte_str, NULL, 16); // 将字节串转换为 16 进制数
}
for (int i = 0; i < hex_len; i++) { // 输出拼接后的 16 进制数组
printf("%02x", hex[i]);
}
printf("\n");
free(hex); // 释放动态分配的内存
return 0;
}
```
在上述代码中,我们使用了 `strtol` 函数将字节串转换为 16 进制数。同时,我们也需要注意字符串长度必须为偶数,否则无法按照两个字符组成一个字节进行拼接。
阅读全文