如下语句:
char *gce = new char[8];
pic.readRawData(gce, 8); //读取后,gce的值为0x21,0xf9,0x04,0x00,0x00,0x00,0x00,0x00
//这样写,将在" (gce[1] != 0xf9) "时进入执行 dest.writeRawData(gce ,8);
if((gce[0] != 0x21) || (gce[1] != 0xf9) || (gce[2] != 0x04) || (gce[3] != 0x00) || (gce[4] != 0x00) || (gce[5] != 0x00) || (gce[6] != 0x00) || (gce[7] != 0x00)){
dest.writeRawData(gce ,8);
}
原因是:gce[1] 的结果是char型,在与0xf9参与比较时,其中之一将会丢失最高位,故结果就是不相同了,在gce[1]前加上(unsigned char)强制转换符后,可得以解决。
if((gce[0] != 0x21) || ((unsigned char)gce[1] != 0xf9) || (gce[2] != 0x04) || (gce[3] != 0x00) || (gce[4] != 0x00) || (gce[5] != 0x00) || (gce[6] != 0x00) || (gce[7] != 0x00)){
dest.writeRawData(gce ,8);
}
上述注意看汇编0xf9附近的区别!