C++ #定义为无符号字符

C++ #定义为无符号字符,c++,c,C++,C,我想知道如何告诉编译器#define是无符号字符。 如果定义一个字节,请执行以下操作: #define AACEESS_PSS 0x80 #define ACCESS_PSS ((unsigned char)0x80) 但是如果#define有更多的字节,该怎么办呢?? 例如: #define ACCESS_PSS {0x32,0xFD,0x6E,0x2D} 我需要此强制转换,用于分配#使用无符号字符定义 int main(){ unsigned char Response

我想知道如何告诉编译器
#define
无符号字符
。 如果定义一个字节,请执行以下操作:

   #define AACEESS_PSS 0x80
    #define ACCESS_PSS  ((unsigned char)0x80)
但是如果
#define
有更多的字节,该怎么办呢?? 例如:

 #define ACCESS_PSS {0x32,0xFD,0x6E,0x2D}
我需要此强制转换,用于分配
#使用
无符号字符定义

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;
                                          }
intmain(){
无符号字符响应数据[100];
对于(int i=0;i
响应数据[i+5]==访问PSS

在C中,不能将四个
无符号字符
与单个相等运算符进行比较

您可以转换为uint32\u 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) { /*...*/ }
响应数据[i+5]==访问PSS

在C中,不能将四个
无符号字符
与单个相等运算符进行比较

您可以转换为uint32\u 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) { /*...*/ }
响应数据[i+5]==访问PSS

在C中,不能将四个
无符号字符
与单个相等运算符进行比较

您可以转换为uint32\u 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) { /*...*/ }
响应数据[i+5]==访问PSS

在C中,不能将四个
无符号字符
与单个相等运算符进行比较

您可以转换为uint32\u 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) { /*...*/ }

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

#define ACCESS_PSS (unsigned char const[]){0x32,0xFD,0x6E,0x2D}
您仍然可以将其用作
访问\u PSS[2]
例如


定义中的
常量
允许编译器进行优化,特别是它可以避免该数组的多个副本。因为C99我们有复合文本:

#define ACCESS_PSS (unsigned char const[]){0x32,0xFD,0x6E,0x2D}
您仍然可以将其用作
访问\u PSS[2]
例如


定义中的
常量
允许编译器进行优化,特别是它可以避免该数组的多个副本。因为C99我们有复合文本:

#define ACCESS_PSS (unsigned char const[]){0x32,0xFD,0x6E,0x2D}
您仍然可以将其用作
访问\u PSS[2]
例如


定义中的
常量
允许编译器进行优化,特别是它可以避免该数组的多个副本。因为C99我们有复合文本:

#define ACCESS_PSS (unsigned char const[]){0x32,0xFD,0x6E,0x2D}
您仍然可以将其用作
访问\u PSS[2]
例如




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

您认为
{0x32,0xFD,0x6E,0x2D}
类型为
unsigned char
?提示:@SouravGhosh的答案是否定的。你能具体说明你所面临的概念问题吗?照目前的情况看,这个问题将一事无成。#define只是文本替换-编译器如何处理它将取决于你在代码中如何使用AACEESS#U PSS。看起来,甚至还没有说明。@EugeniuRosca这是因为这个问题是从programmers.se迁移过来的,她在那里有一个问题。你认为
{0x32,0xFD,0x6E,0x2D}
类型为
unsigned char
?提示:@SouravGhosh的答案是否定的。你能具体说明你所面临的概念问题吗?照目前的情况看,这个问题将一事无成。#define只是文本替换-编译器如何处理它将取决于你在代码中如何使用AACEESS#U PSS。看起来,甚至还没有说明。@EugeniuRosca这是因为这个问题是从programmers.se迁移过来的,她在那里有一个问题。你认为
{0x32,0xFD,0x6E,0x2D}
类型为
unsigned char
?提示:@SouravGhosh的答案是否定的。你能具体说明你所面临的概念问题吗?照目前的情况看,这个问题将一事无成。#define只是文本替换-编译器如何处理它将取决于你在代码中如何使用AACEESS#U PSS。看起来,甚至还没有说明。@EugeniuRosca这是因为这个问题是从programmers.se迁移过来的,她在那里有一个问题。你认为
{0x32,0xFD,0x6E,0x2D}
类型为
unsigned char
?提示:@SouravGhosh的答案是否定的。你能具体说明你所面临的概念问题吗?照目前的情况看,这个问题将一事无成。#define只是文本替换-编译器如何处理它将取决于你在代码中如何使用AACEESS#U PSS。看起来,甚至还没有说明。@EugeniuRosca这是因为这个问题是从programmers.se迁移过来的,她在那里有一个问题。很抱歉这么挑剔,但是使用干净的解决方案
ACCESS\u PSS
必须是小写的
ACCESS\u PSS
。值得一提的是,这个解决方案依赖于持久性。@barakmanos:哪个解决方案?memcmp不依赖,我已经注意到了使用uint32的帽子可能很危险。此外,您可能希望将该
[4]
更改为
[]
,并将另一个
4
更改为
sizeof(access\u pss)/sizeof(*access\u pss)
。如果目的只是字节比较,那么您是对的,Endianness在这里没有影响。很抱歉挑剔,但是使用干净的解决方案
ACCESS\u PSS
必须是小写的
ACCESS\u PSS
。值得一提的是,这个解决方案依赖于Endianness。@barakmanos:哪个解决方案?memcmp不依赖,我已经注意到了使用uint32可能是危险的。此外,您可能希望将该
[4]
更改为
[]
,并将另一个
4
更改为
sizeof(access\u pss)/sizeof(*access\u pss)
。如果目的只是字节比较,那么您是对的,Endianness在这里没有影响。很抱歉挑剔,但是使用干净的解决方案