我有一个输入
char *input="00112233FFAA";
uint8_t output[6];
Run Code Online (Sandbox Code Playgroud)
什么是转换的最简单的方法input为output用sscanf?(首选没有循环的1行)我想到的解决方案不会扩展到20+十六进制字符串.
sscanf(input, "%x%x%x%x%x",output[0], output[1]....output[5]);
Run Code Online (Sandbox Code Playgroud)
Ker*_* SB 11
为什么scanf这可以很容易地手写:
const size_t numdigits = strlen(input) / 2;
uint8_t * const output = malloc(numdigits);
for (size_t i = 0; i != numdigits; ++i)
{
output[i] = 16 * toInt(input[2*i]) + toInt(intput[2*i+1]);
}
unsigned int toInt(char c)
{
if (c >= '0' && c <= '9') return c - '0';
if (c >= 'A' && c <= 'F') return 10 + c - 'A';
if (c >= 'a' && c <= 'f') return 10 + c - 'a';
return -1;
}
Run Code Online (Sandbox Code Playgroud)
如果不想使用循环,则需要显式写出所有六个(或二十个)数组位置(尽管%x这不是正确的转换字符-它期望将指针unsigned int作为其对应的参数)。如果您不希望将它们全部写出来,则需要使用循环-可以很简单,但是:
for (i = 0; i < 6; i++)
sscanf(&input[i * 2], "%2hhx", &output[i]);
Run Code Online (Sandbox Code Playgroud)