#define 为无符号字符
#define as unsigned char
我想知道如何告诉编译器#define
是一个unsigned 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;
}
ResponseData
从程序获取值,字节 5 到 8 等于 ACCESS_PSS
。
响应数据[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) { /*...*/ }
自 C99 以来,我们有复合文字:
#define ACCESS_PSS (unsigned char const[]){0x32,0xFD,0x6E,0x2D}
您仍然可以将其用作ACCESS_PSS[2]
例如
定义中的const
允许编译器进行优化,特别是它可以避免该数组的多个副本。
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中