uint8和C中的char之间的转换

时间:2016-02-08 08:10:07

标签: c arrays char uint8t

我有一个API实现对EEPROM的写操作。这是它的声明:

CYBLE_API_RESULT_T CyBle_StoreAppData (uint8 * srcBuff, const uint8 destAddr[], uint32 buffLen, uint8 isForceWrite);

当我调用此函数并将数组参数发送到已声明为srcBuff类型的uint8时,它运行良好。

问题是,我需要向它发送char数组指针。我当时认为char已经是uint8,但如果我向该函数发送char数组指针而不是uint8,我会收到编译器警告。为什么我不能使用char代替uint8?以下是调用该函数的两个示例:

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.

Aren&#t; t charuint8相同?

4 个答案:

答案 0 :(得分:1)

两种类型都是8位长。不同之处在于签名。

  • char类型未签名。
  • char类型应在您的案例中签名。实际上,它依赖于编译器,但大多数编译器将char类型视为默认签名,并且如果需要,可以选择强制{{1}}类型为unsigned。请参阅C99 standard document reference§6.2.5p15:
  

实现应将char定义为与signed char或unsigned char具有相同的范围,表示和行为。

     

在limits.h中定义的CHAR_MIN将具有值0或SCHAR_MIN之一,这可用于区分这两个选项。

答案 1 :(得分:1)

uint8                   Container_ID[10];

这是一个无符号的8位整数,可能的值从0255

char                    Prefix[10];

在您的情况下,带有-127+128的整数值的带符号8位字符

因为它们不是相同的符号类型,所以您应该得到转换警告。

答案 2 :(得分:1)

charuint8都有一些共同之处,这很重要:它们都是8位整数。现在有两个问题

  • 这是/这8位整数是签名还是未签名?

更重要的是

  • 你的情况重要吗?

即。你想向函数发送一个由整数组成的数组,重要的是将它们视为已签名吗?例如,如果函数会执行类似的操作,

if (charvalue < 0) { ... 

希望函数注意字节的符号(如果可能的话);如果函数会这样做,并且符号很重要:发送255是正的,但考虑到签名的字节,那将被解释为-1 ...

但这没有意义,因为该函数需要uint8 *(实际上在devs可能已使用char函数内部单独处理字节,并使用它们的签名,但在这种情况下有一个像这样的功能签名会产生误导!)

所以E 2 PROM处理无符号字节,你可以安全地转换给函数的指针来删除警告,

CyBle_StoreAppData((uint8 *)Prefix,datastack_ROM,10,0);

或只是

uint8  Prefix[10];

如果这不会导致其他代码出现其他问题/警告。

答案 3 :(得分:0)

uint8_t很可能被定义为unsigned char。

char是它自己的类型,其行为与signed char或unsigned char完全相同(注意,这些是三种不同的类型)。

在这种情况下,它的行为类似于signed char,并且您会收到转换警告。

相关问题