1

これを行うにはどうすればよいでしょうか?また、簡単にできる方法はありますか?Boostなどのライブラリを使用していますか?

4

3 に答える 3

4

int を書き出す DataOutputStream は、4 バイトの int を上位バイトから書き出します。char* に読み込み、再解釈し、バイト オーダーを変換する必要がある場合は ntohl を使用します。

ifstream is;
is.open ("test.txt", ios::binary );
char* pBuffer = new char[4];

is.read (pBuffer, 4);
is.close();

int* pInt = reinterpret_cast<int*>(pBuffer);
int myInt = ntohl(*pInt); // This is only required if you are on a little endian box
delete [] pBuffer;
于 2009-07-23T03:41:57.283 に答える
2

これを行う唯一のクロスプラットフォームの方法は、バイトごとに (つまり、charによってchar) 読み取り、それらから整数を構築することです。は 32 ビット値を保持するのに十分な幅であることが保証されていないlongため、を使用することをお勧めします。intここでバイトを配列に読み取ったと仮定しますchar[4](他の回答では、その方法がすでに示されています):

char bytes[4];
...
long n = (long(bytes[0]) << 24) | (long(bytes[1]) << 16) |
         (long(bytes[2]) << 8)  |  long(bytes[3])
于 2009-07-23T03:55:04.107 に答える
0

アイデア:

  1. ストレートバイナリとして読み込み、必要に応じてバイトを変換/解釈します。したがって、Java が int に対して 4 バイトを書き出した場合、4 バイトを読み込みます。変更するエンディアンネスがある場合は、それを行い、バイト配列を c++ int にキャスト (またはコピー) します。
  2. Java コードを変更できる場合は、UTF-8 テキストや ascii、Google Protocol Buffers 形式など、C++ が読み取れる一般的なものとして書き出すことができます。
于 2009-07-23T03:35:25.410 に答える