整数を使用していくつかの作業を行う必要がありますが、たとえば、32ビット値の最上位4ビットを取得できるように、それらをバイナリデータとして扱うことに興味があります。私がやろうとしているのは、たとえば、最初の 4 ビット、2 番目の 6 ビット、最後の 22 ビットなど、いくつかの 32 ビット値を取得し、それらを連結して別の 32 ビット値を取得することです。 .
誰かがこれを行うためのライブラリまたはその他の方法を推奨できますか?. ありがとうございました。
そのためのライブラリは必要ないようです。あなたがやりたいことには、ビットシフト、論理and、またはxorだけで十分です。
編集:例を挙げるだけです。が32a
ビットint
で、最初の 4 ビットを取り、それを別の整数の最下位ビット位置に格納するとしb
ます。これを行うことができます。
b = (a & (0xf << (31-4))) >> (31-4)
組み込みのビット演算子を使用するだけですか?
int a;
int b;
int c;
int result = a & 0xF0000000 | b & 0x0FC00000 | c & 0x003FFFFF;
ビット演算子を試して、ビットを使用して処理してください: |、&、^、<<、>>。
IOの場合、それらすべてが複数のプラットフォームで読み取り可能であることを保証する場合は、htons()、htonl()、ntohs()、ntohl()関数セットで処理します。
私は常にビット フィールドを使用し、コンパイラにすべてのビット シフトを理解させることを好みます。また、変更したい場合も簡単です。ただし、符号付き整数には注意し、ビットフィールドに関してコンパイラがそれらをどのように扱うかを理解する必要があります。
それにもかかわらず...
union _type
{
struct
{
unsigned int a : 22;
unsigned int b : 6;
unsigned int c : 4;
};
unsigned int u;
int s;
};
ビット演算に関する既存の記事がいくつかあります。ビットシフトの絶対初心者ガイドですか?または 単一ビットを設定、クリア、およびテストするためのアルゴリズムの説明。