これを行うにはどうすればよいでしょうか?また、簡単にできる方法はありますか?Boostなどのライブラリを使用していますか?
1106 次
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
アイデア:
- ストレートバイナリとして読み込み、必要に応じてバイトを変換/解釈します。したがって、Java が int に対して 4 バイトを書き出した場合、4 バイトを読み込みます。変更するエンディアンネスがある場合は、それを行い、バイト配列を c++ int にキャスト (またはコピー) します。
- Java コードを変更できる場合は、UTF-8 テキストや ascii、Google Protocol Buffers 形式など、C++ が読み取れる一般的なものとして書き出すことができます。
于 2009-07-23T03:35:25.410 に答える