将十六进制数组转换为十六进制数组

时间:2013-07-30 11:23:50

标签: c hex

我正在努力在处理过程中将字符串理解为十六进制字符串。我正在编写一个小程序,我将输入ascii文本作为十六进制字符串。

我读到了:

char *str = "313233";

这实际上是0x31,0x32和0x33,实际上是字符串“123”。

我需要一个unsigned char数组,如下所示:

unsigned char val[] = {0x31, 0x32, 0x33};

当我尝试使用sscanf或sprintf时,他们希望整数数组成为目标指针:(

就是这样:

sprintf(str, "%2x", &val[0]);

怎么做?也许这是非常微不足道的但不知何故我很困惑。

感谢。

1 个答案:

答案 0 :(得分:1)

sscanf可以解决问题:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    char *str = "313233";
    size_t i, n = strlen(str) / 2;
    unsigned char *v;

    v = malloc(n);
    if (v == NULL) {
        perror("malloc");
        exit(EXIT_FAILURE);
    }
    for (i = 0; i < n; i++)
        sscanf(str + (i * 2), "%2hhx", &v[i]);
    for (i = 0; i < n; i++)
        printf("0x%2x\n", v[i]);
    free(v);
    return 0;   
}