2

我有以下代码,并且在 if 语句上收到编译器“将非零整数转换为指针”的警告。

我尝试了多种组合来删除警告,包括将我的条件的右侧用双引号括起来,例如。“1”,使警告消失,但条件不起作用。

if ((unsigned char*)buffer[8] == '1' && (unsigned char*)buffer[9] == '1')
{
      unsigned char colorPtr = (unsigned char*)&buffer[10];
      singleColor(CDCInstance, lightCount, colorPtr, 6);
}

缓冲区的类型为 void *

4

1 回答 1

7

类型转换的优先级低于[]运算符。您当前的代码与

if ((unsigned char*) (buffer[8]) == '1' && (unsigned char*) (buffer[9]) == '1')
/* note parentheses: ^         ^                            ^         ^      */

你可能是说

if (((unsigned char*) buffer)[8] == '1' && ((unsigned char*) buffer)[9] == '1')
/*  ^                       ^              ^                       ^         */

反而。

于 2013-10-16T09:59:55.287 回答