2

私がC++で持っている場合:

char abc[4];

abc[0] = 0xC0; //11000000 in binary

abc[1] = 0x20; //00100000 in binary

abc[2] = 0x44; //01000100 in binary

abc[3] = 0x20; //00100000 in binary

では、これがどのようにメモリに保存されるか-

11000000 00100000 01000100 00100000 or the reverse way ??
----------------------------------- 
   0th      1st     2nd      3rd

Javaで私は作成していますBitset abc = new Bitset(32);

したがって、同じ値をこれ(同じ順序)で格納する必要があります。これはビット位置に応じて後で変更される可能性があるため、まったく同じ方法である必要があります。

そうabc[32] = 0xC0204420しますか?そして、C ++の方法で値を保存したい場合はどうすればよいですか?私が間違っている場合は、Javaでこれを行う方法...

4

3 に答える 3

1

はい、それがC++charがメモリ内の配列を表す方法になります。

Javaに関しては、それは完全に恣意的です。これは、C++の「表現」でのインデックスとバイト/ビットインデックスの間のマッピングをどのように定義するかによって異なります。Bitset一貫性がある限り、このマッピングは好きなように定義できます。

于 2011-05-09T11:34:19.420 に答える
1

エンディアンは問題ではありません。最小のアドレスを使用するchar[4]と、0が最初になり、最大の3が最後になるため、メモリに格納されます

char[0] char[1] char[2] char[3]

あなたが何をしても。

実行するint x = *(reinterpret_cast<int*>(abc))と、エンディアンに応じて異なる結果が得られます。これは、(4byte-)が、場合によっては、と読み取られる場合があり、60年代にも存在していたと思います。int012332102301

のthsの位置に0xC0204420(より大きい数127)を入れることはできません。「高速」(かつ危険)なものを実装したい場合は、プラットフォームに依存する必要があります。を見てください[32]abcreinterpret_casthtonntoh

于 2011-05-09T11:42:43.443 に答える
0

char abc[4];文字ごとに作成して入力すると、はい、メモリ内では。として表され11000000 00100000 01000100 00100000ます。

Java BitSetで見られる問題は、BitSetの内容を数値として単純に表すことができないことです。そのための方法がないため、0xC0204420をBitSetに変換する方法、またはBitSetを0xC0204420のような数値として表す方法を教えてください。 ?1つの可能性は、BitSetから8ビットごとに取得し、それらから( andなどcharのJavaビット演算子を使用して)作成してから、以前のC++と同じである必要があるchar配列などを作成することです。<<|char[4]

于 2011-05-09T11:45:18.107 に答える