0

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

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

但我收到以下错误:

错误:无法找到数字文字运算符 'operator"" x0'</p>

4

2 回答 2

4

根据您的规范,0b0000001x很可能意味着“这是一个二进制数,即位序列”,并且x是您应该根据线路的当前状态设置或清除的位。仅在 C++14 或更高版本中支持内置二进制文字,在 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);
...;
于 2012-08-11T14:44:37.867 回答
1

看起来 C 不支持二进制文字。尝试改用十六进制。

payload[0] = 0x01;
于 2012-08-11T14:33:32.427 回答