我有一個API來實現對EEPROM的寫入操作。下面是它的聲明:在C中的uint8和char之間的轉換
CYBLE_API_RESULT_T CyBle_StoreAppData (uint8 * srcBuff, const uint8 destAddr[], uint32 buffLen, uint8 isForceWrite);
它運作良好時,我調用此函數,併發送一個陣列參數已被宣佈爲uint8
型srcBuff
。
問題是,我需要發送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我看過類似的問題,但我想我找不到那個。我怎麼能提到有類似的問題呢?還是我需要那樣做? –