本文介绍了在转换很长的十六进制字符串为int的sscanf与阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个像
输入 的char *输入=00112233FFAA;
uint8_t有输出[6];
什么是转换的最简单的方法输入
到输出
与的sscanf
? (preFER 1,无环线)的解我心中不能扩展到20+的十六进制字符串。
的sscanf(输入%X%X%X%X%X,输出[0],输出[1]输出.... [5]);
解决方案
为什么 scanf函数
如果这可以用手很容易写:
常量为size_t numdigits = strlen的(输入)/ 2;uint8_t有* const的输出=的malloc(numdigits);用于(为size_t我!= 0; i = numdigits ++ I)
{
输出[I] = 16 * toInt(输入[2 * i])+ toInt(intput [2 * I + 1]);
}unsigned int类型toInt(焦三)
{
如果(c取代; ='0'和;&放大器;℃下='9')返回Ç - 0;
如果(c基='A'和;&安培; C< ='F')返回10 + C - 'A';
如果(c基='A'和;&安培; C< ='F')返回10 + C - 'A';
返回-1;
}
I have an input like
char *input="00112233FFAA";
uint8_t output[6];
What is the easiest way to convert input
into output
with sscanf
? (prefer 1 line with no loop) The solution I have in mind doesn't scale to 20+ hex string.
sscanf(input, "%x%x%x%x%x",output[0], output[1]....output[5]);
解决方案
Why scanf
if this can be easily written by hand:
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;
}
这篇关于在转换很长的十六进制字符串为int的sscanf与阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!