我在努力使字符串在处理过程中被理解为十六进制字符串。我正在编写一个小程序,在此程序中我将输入的ascii文本作为十六进制字符串。
那就是我读:
char *str = "313233";
实际上是0x31、0x32和0x33,实际上是字符串“ 123”。
我需要一个无符号字符数组,如下所示:
unsigned char val[] = {0x31, 0x32, 0x33};
当我尝试sscanf或sprintf时,他们期望整数数组成为目标指针:(
也就是说,类似:
sprintf(str, "%2x", &val[0]);
这该怎么做?也许这是非常琐碎的,但我莫名其妙地感到困惑。
谢谢。
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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句