#define as unsigned char

时间:2015-06-19 09:15:06

标签: c++ c

我想知道如何告诉编译器#defineunsigned char。 如果#define 1个字节执行此操作:

   #define AACEESS_PSS 0x80
    #define ACCESS_PSS  ((unsigned char)0x80)

但如果#define有更多的字节应该做什么? 例如:

 #define ACCESS_PSS {0x32,0xFD,0x6E,0x2D}

我需要通过#define

分配unsigned char
int main(){
unsigned char ResponseData[100];
for (int i = 0; i <4;i++0){

                if (ResponseData[i+5]==ACCESS_PSS){ //how to do this???
                            cout<<5<<endl;
                                          }
来自programm的

ResponseData获取值,而字节5到8等于ACCESS_PSS

2 个答案:

答案 0 :(得分:3)

  

ResponseData第[i + 5] == ACCESS_PSS

您不能将四个unsigned chars与C中的单个相等运算符进行比较。

您可以转换为uint32_t,但由于未对齐的访问或不同的字节顺序,它可能会中断,即:

#define ACCESS_PSS    0x32FD6E2D
...
if(*((uint32_t*) (ResponseData + i + 5)) == ACCESS_PSS) { /*...*/ }

唯一的干净方式是memcmp或类似功能:

const unsigned char access_pss[4] = {0x32,0xFD,0x6E,0x2D};
...
if(memcmp(ResponseData + i + 5, access_pss, 4) == 0) { /*...*/ }

答案 1 :(得分:1)

从C99开始,我们就有了复合文字:

#define ACCESS_PSS (unsigned char const[]){0x32,0xFD,0x6E,0x2D}

您仍然可以将其用作ACCESS_PSS[2],例如

定义中的const允许编译器进行优化,特别是它可以避免遍布该数组的多个副本。