我正在努力在处理过程中将字符串理解为十六进制字符串。我正在编写一个小程序,我将输入ascii文本作为十六进制字符串。
我读到了:
char *str = "313233";
这实际上是0x31,0x32和0x33,实际上是字符串“123”。
我需要一个unsigned char数组,如下所示:
unsigned char val[] = {0x31, 0x32, 0x33};
当我尝试使用sscanf或sprintf时,他们希望整数数组成为目标指针:(
就是这样:
sprintf(str, "%2x", &val[0]);
怎么做?也许这是非常微不足道的但不知何故我很困惑。
感谢。
答案 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;
}