我有這需要一個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。 –