uint8_t *引数を取る関数があります:
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|注:「constchar *」が必要ですが、引数のタイプは「uint8_t*」です。
だから、私はデータ変数を型キャストすることによって解決策を見つけました:
ihex_decode(data, strlen((const char *)data), sysex_data);
警告は消えますが、この解決策は安全かどうか疑問に思います。
もっと良い方法はありますか?
ありがとう