我有这需要一个uint8_t *的函数参数:投无符号字符*(uint8_t *)为const char *
uint8_t* ihex_decode(uint8_t *in, size_t len, uint8_t *out)
{
uint8_t i, hn, ln;
for (i = 0; i < len; i+=2) {
hn = in[i] > '9' ? (in[i]|32) - 'a' + 10 : in[i] - '0';
ln = in[i+1] > '9' ? (in[i+1]|32) - 'a' + 10 : in[i+1] - '0';
out[i/2] = (hn << 4) | ln;
}
return out;
}
我用这个函数:
uint8_t data[SPM_PAGESIZE]; // SPM_PAGESIZE = 256 bytes
uint8_t sysex_data[SPM_PAGESIZE/2];
ihex_decode(data, strlen(data), sysex_data);
但在这情况下,我的编译器(AVR-GCC)返回一个警告:
的main.c | 89 |警告:在通过的 'strlen的' 参数1指针目标的符号性不同/usr/include/string.h|399|note:预计“为const char *”,但参数的类型为“uint8_t *”
所以,我发现的类型转换数据的VAR的解决方案:
ihex_decode(data, strlen((const char *)data), sysex_data);
该警告消失,但我不知道此解决方案是否安全。
有没有更好的方法?
感谢
为什么你使用'uint8_t'作为显然是'char'的类型? –
因为我的程序在微控制器上运行。所以我不能有负面价值。 –
这没有任何意义。输入数据似乎是ASCII十六进制,所以它自然是char。输出数据当然会保持为uint8_t。 –