根据您的规格,0b0000001x
最有可能的意思是“这是一个二进制数,即比特序列”,并x
是根据该行的当前状态,你应该设置位或清除。 Builtin binary literals are only supported in C++14 or above,在C++ 11中,它们可以作为用户定义的文字实现,在C和较旧版本的C++中,您需要手动计算该值(或者可以使用实现此功能的编译器作为非标准扩展) gcc和clang都这么做)。
如果我正确地读这篇文章,字节顺序是正确的,得到的字节值应为:
payload[0] = 2 + (is_line_available ? 1 : 0);
而且,你是不是对分配任何空间,所以你会写进入随机记忆。您需要分配一些内存:
静态分配,工作在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);
...;
'0b0000001x'不是C.在你规范有效的数字表达它最有可能意思是“这是一个二进制数,即一系列比特”,而“x”是你应该根据当前状态设置或清除的位。如果我正确读取并且字节顺序正确,那么结果字节值应该是'(2 +(is_line_available?1:0))'。 (另外,你没有为'payload'分配任何空间,所以你会写入随机存储器中。) – DCoder 2012-08-11 14:29:22
@DCoder:+1作为回答的帖子 – Aziz 2012-08-11 14:30:29