" C"是否有可用的库?这将在C
中将十六进制转换为字节数组例如
Input const char *ptr="ff:ff:fe:ff"
有一个":" deliminator值
答案 0 :(得分:4)
您可以使用strtoll
函数进行单个字节的转换。该函数将base
参数作为其第三个参数,并在输入中报告新位置,让您决定跳过分隔符和读取更多数据,还是完成循环:
char *ptr="ff:ff:fe:ff";
for (;;) {
int res = strtol(ptr, &ptr, 16);
printf("%x\n", res);
if (*ptr == ':') {
ptr++;
} else {
break;
}
}
答案 1 :(得分:2)
您可能可以使用sscanf()来阅读。
中的值#include <stdio.h>
int main() {
const char *input = "ff:ff:fe:ff";
unsigned int array[4];
int ret;
ret = sscanf(input, "%02x:%02x:%02x:%02x",
&array[0], &array[1], &array[2], &array[3]);
if (ret != 4) {
printf("Match failed.\n");
return -1;
}
printf("array = { %02x, %02x, %02x, %02x }\n",
array[0], array[1], array[2], array[3]);
return 0;
}
输出:
array = { ff, ff, fe, ff }
答案 2 :(得分:1)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define h2i(x) (isdigit(x) ? (x) - '0' : tolower(x) - 'a' + 10)
int main(void){
const char *ptr="ff:ff:fe:ff";
size_t size = (strlen(ptr)+1)/3;
unsigned char byte[size];
int i;
for(i = 0; i < size; ++i){
byte[i] = h2i(ptr[i*3])*16 + h2i(ptr[i*3+1]);
//printf("%02x", byte[i]);//for check
}
return 0;
}