1

Java で C++ ソフトウェアを変換しようとしていますが、ビット操作では同じ結果が得られません。私がやっていることの概要: データ エントリを含む ASCII ファイルがあり、長さは 2 バイト、符号なし (0-65535) です。ここで、2 バイトの unsigned int を 2 つの 1 バイトの unsigned short int に変換したいと考えています。

C++ コード:

signed char * pINT8;
signed char ACCBuf[3];
UInt16 tempBuf[128];


tempBuf[0] = Convert::ToUInt16(line);
pINT8 = (signed char *)&tempBuf[0];
ACCBuf[0] = *pINT8;
pINT8++;
ACCBuf[1] = *pINT8;

Java コード:

int[] ACCBuf = new int[6];
int[] tempBuf = new int[128];
tempBuf[0] = Integer.parseInt(line);
ACCBuf[0] = tempBuf[0] >> 8;
ACCBuf[1] = 0x00FF & tempBuf[0];

この 2 つのコードは、異なる結果を生成します。理由はありますか?

4

1 に答える 1

1

これは、システムのエンディアンに依存する場合があります。ACCBUF[0]リトルエンディアンシステムの場合、C++コードの下位バイトは。ACCBUF[0]Javaコードには、ハードウェアに関係なく、上位バイトがあります。

Javaで同じ結果を取得したい場合は、上位バイトと下位バイトを入れ替える必要があります

ACCBuf[0] = 0x00FF & tempBuf[0];
ACCBuf[1] = tempBuf[0] >> 8;

これで、JavaまたはC++のどちらでも同じビットを使用できるようになります。

2つのコードスニペットのもう1つの違いは、使用されるタイプです。Javaコードには32ビットのintがあり、C++にはそれぞれ16ビットのunsignedintが8ビットの文字があります。これはここでは関係ありませんが、異なるコードスニペットを比較するときは注意する必要があります。

于 2013-02-27T11:55:07.160 に答える