无法找到数字文字运算符'operator“”x0'

时间:2012-08-11 14:23:01

标签: c bitwise-operators

我正在阅读它解释的协议规范byte 0 : 0b0000001x if line Available. 所以,我必须根据这个文档创建数据包,但我不知道如何将0b0000001x分配给C中的变量。 我有:

unsigned char * payload;
payload[0] = 0b0000001x;

但是我收到以下错误:

  

错误:无法找到数字文字运算符'operator“”x0'

2 个答案:

答案 0 :(得分:4)

根据您的规范,0b0000001x很可能意味着“这是一个二进制数,即一个位序列”,而x是您应根据当前状态设置或清除的位这条线。内置binary literals are only supported in C++14 or above,在C ++ 11中它们可以实现为用户定义的文字,在C和旧版本的C ++中,您需要手动计算值(或者您可以使用编译器将其实现为非标准扩展,gcc和clang都这样做。)

如果我正确读取并且字节顺序正确,则结果字节值应为:

payload[0] = 2 + (is_line_available ? 1 : 0);

此外,您没有为payload分配任何空间,因此您将写入随机存储器。你需要分配一些内存:

静态分配,适用于C和C ++:

unsigned char payload[24]; // or whatever your message's length is

C风格的动态分配(确保在完成后释放它):

unsigned char *payload = malloc(24);
...; 
free(payload);

C ++推荐的方法:

#include <vector>
std::vector<unsigned char> payload;
payload.reserve(24);
...;

答案 1 :(得分:1)

It looks like C doesn't support binary literals。请尝试使用十六进制。

payload[0] = 0x01;