仕様に基づいて、0b0000001x
「これは 2 進数、つまり一連のビット」である可能性が高くx
、回線の現在の状態に応じて設定またはクリアする必要があるビットです。組み込みのバイナリ リテラルは、C++14 以降でのみサポートされます。C++11 では、ユーザー定義のリテラルとして実装できます。C および古いバージョンの C++ では、手動で値を計算する必要があります (またはコンパイラを使用できます)。 gcc と clang の両方がこれを非標準の拡張機能として実装しています)。
これを正しく読んでおり、エンディアンが正しい場合、結果のバイト値は次のようになります。
payload[0] = 2 + (is_line_available ? 1 : 0);
また、 and にはスペースを割り当てていないため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);
...;