我正在阅读它解释的协议规范byte 0 : 0b0000001x if line Available.
所以,我必须根据这个文档创建数据包,但我不知道如何将0b0000001x分配给C中的变量。
我有:
unsigned char * payload;
payload[0] = 0b0000001x;
但是我收到以下错误:
错误:无法找到数字文字运算符'operator“”x0'
答案 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;