私はuint8_tを取る機能をしました*引数:はのconst char型にunsigned char型の*(uint8_t *)をキャスト*
uint8_t data[SPM_PAGESIZE]; // SPM_PAGESIZE = 256 bytes
uint8_t sysex_data[SPM_PAGESIZE/2];
ihex_decode(data, strlen(data), sysex_data);
しかし、これでは:私はこの機能を使用
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;
}
場合、私のコンパイラ(AVR-GCC)が警告を返す:
のmain.cを| 89 |警告: 'strlenを' の引数1を渡し内のポインタのターゲットは符号の有無が異なる /usr/include/string.h|399|note:「* uint8_t」「のconstのchar *」期待が、引数は型である
だから、私は、データVARをキャストタイプ別の解決策を見つけました:
ihex_decode(data, strlen((const char *)data), sysex_data);
この警告は消えますが、この解決策が安全かどうかは疑問です。
良い方法がありますか?非const * constの安全にキャストすることができますされ
おかげ
明らかに 'char'型の' uint8_t'を使っているのはなぜですか? –
私のプログラムはマイクロコントローラで動作しているためです。だから私は負の価値を持つことはできません。 –
それは意味をなさない。入力データはASCIIの16進数のように見えるので、自然にcharです。もちろん、出力データはuint8_tのままです。 –