我正在阅读它解释的协议规范byte 0 : 0b0000001x if line Available.
所以,我必须根据这个文档创建数据包,但我不知道如何将 0b0000001x 分配给 C 中的变量。我有:
unsigned char * payload;
payload[0] = 0b0000001x;
但我收到以下错误:
错误:无法找到数字文字运算符 'operator"" x0'</p>
我正在阅读它解释的协议规范byte 0 : 0b0000001x if line Available.
所以,我必须根据这个文档创建数据包,但我不知道如何将 0b0000001x 分配给 C 中的变量。我有:
unsigned char * payload;
payload[0] = 0b0000001x;
但我收到以下错误:
错误:无法找到数字文字运算符 'operator"" x0'</p>
根据您的规范,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);
...;
看起来 C 不支持二进制文字。尝试改用十六进制。
payload[0] = 0x01;