0

説明されているプロトコル仕様を読んでいますbyte 0 : 0b0000001x if line Available. 。したがって、このドキュメントに従ってパケットを作成する必要がありますが、C の変数に 0b0000001x を割り当てる方法がわかりません。

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

しかし、次のエラーが表示されます。

エラー: 数値リテラル演算子 'operator"" x0' が見つかりません</p>

4

2 に答える 2

4

仕様に基づいて、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);
...;
于 2012-08-11T14:44:37.867 に答える
1

Cはバイナリリテラルをサポートしていないようです。代わりに16進数を使用してみてください。

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