1

現在、32 ビット パターンを保存して分析する必要があるプロジェクトに取り組んでいます。たとえば、「1001 1001 1100 1000」などのパターンを char として再解釈されない変数に格納する方法が必要です。

4

4 に答える 4

2

C ++ 03では、unsigned intまたはを使用しますunsigned longが、どちらも正確に32ビットに指定されていません。は、少なくとも値[0、2 32unsigned long -1]を保持できるように指定されているため、理論的には32ビットより大きくなる可能性があります。C ++ 11では、;を使用します。uint32_t

たとえば、0000 0000 0000 0000 1001 1001 1100 10000x99c8、です。ここ0xで、は16進プレフィックスです。

uint32_t bitpattern = 0x998c

変数bitpatternに目的のビットパターンが含まれていて、それを16進数としてコンソールにストリーミングする場合は、次を使用します。

std::cout << std::hex << bitpattern;
于 2012-10-03T11:06:31.913 に答える
1

32 ビット パターンを int に変換する場合は、STL コンテナー<bitset>を使用してジョブを実行することもできます。

std::bitset<32> bit(std::string("0001100111001000"));
long unsigned bit_number = bit.to_ulong();
std::string bit_string = bit.to_string();
于 2012-10-03T11:34:02.257 に答える
0

パターンが 32 ビットではないことに気付きましたよね?

そうではないので、次のようなものです

unsigned long pattern = 0x99c8;

unsigned long16 ビット未満のプラットフォームを見つけるのは難しいでしょう。Lke Armen は、持っている場合uint32_tはそれを使用すると言いました。

于 2012-10-03T11:09:10.023 に答える
0

独自のシステムを作成するために整数型とビットマスキングを使用することに加えて、ビット フィールドという組み込みのめったに使用されない機能を検討することもできます。このような型の定義は構造体によく似ていますが、各要素のデータ型は匿名であり、サイズはビット数で指定されます。多少のオーバーヘッドはありますが、自分で実装しようとするよりもはるかに多くはありません。実際には、コンパイラに作業を任せます。

構造体を整数型 (long など) の間で前後に変換する必要がある場合は、reinterpret_cast を (ab) 使用するだけです。

struct bitSet {
  bitSet(long in1) { //ctor, eg bitSet tmpBit(input);
    *this = reinterpret_cast<bitSet>(in1);
  }
  long toLong() { //eg output=tmpBit.toLong;
    return reinterpret_cast<long>(*this);
  }

  unsigned U0 : 4;
  unsigned U1 : 4;
  unsigned U2 : 4;
  unsigned U3 : 4;
  unsigned U4 : 4;
  unsigned U5 : 4;
  unsigned U6 : 4;
  unsigned U7 : 4;
};

これの利点は、整数型の長さを保証することはできませんが、これにより、各要素の長さが 4 ビットのみであることを保証できることです。

于 2012-10-03T11:57:18.960 に答える