У меня есть API, который реализует операцию записи в EEPROM. Вот его заявление:Преобразование между uint8 и char в C
CYBLE_API_RESULT_T CyBle_StoreAppData (uint8 * srcBuff, const uint8 destAddr[], uint32 buffLen, uint8 isForceWrite);
Это работает хорошо, когда я называю эту функцию и отправить параметр массива в srcBuff
, который был объявлен как uint8
типа.
Проблема в том, что мне нужно отправить указатель на массив char
. Я думал, что char
уже является uint8
, но я получаю предупреждение о компиляторе, если я отправлю указатель на массив char
этой функции вместо uint8
. Почему я не могу использовать char
вместо uint8
? Вот 2 примера вызова этой функции:
static const uint8 datastack_ROM[dedicatedRomSize] = {0};
uint8 Container_ID[10];
char Prefix[10];
//Call the function with Container_ID which has been declared as uint8. This is working.
CyBle_StoreAppData(Container_ID,datastack_ROM,10,0);
//Call the function with Prefix which has been declared as char. This is NOT working.
CyBle_StoreAppData(Prefix,datastack_ROM,10,0);
Вот предупреждение для второго вызова:
passing char[10] to parameter of type 'uint8 *' converts between pointers to integer types with different sign.
ли не char
и uint8
же?
Важная вещь в сообщении об ошибке - это часть о «другом знаке». Это означает, что ваш 'char' тип' signed', тогда как 'uint8' (предполагается здесь)' unsigned'. Вероятно, это не будет большой проблемой, поэтому вы должны просто указать свой указатель: 'CyBle_StoreAppData ((uint8 *) Prefix, ...)' –
Это похоже на нарушение ограничений, остерегайтесь: http: // stackoverflow.com/questions/30535814/pass-unsigned-char-pointer-to-atoi-without-cast –
@GiorgiMoniava Я искал похожие вопросы, но, думаю, я не мог этого найти. Как я могу упомянуть, что есть аналогичный вопрос? Или мне это нужно? –