2009-07-23 19 views

答えて

4

intを書き出すDataOutputStreamは、上位バイトを先頭に4バイトのintを書き出します。 char *への読み込み、reinterpret、バイトオーダーの変換が必要な場合は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; 
+0

'sizeof(int)!= 4'のプラットフォームにヒットするまで、うまくやります。または、整数が1の補数または符号ビットであり、2の補数でないもの(ISO C99で許可されているもの)。 –

+0

...およびISO C++ –

+0

整数の補数または符号ビットはどのプラットフォームでですか?私が知りたいのですが。 – anio

0

アイデア:

  1. 変換/必要に応じてバイトを解釈し、その後、ストレートバイナリとしてそれを読んでください。したがって、Javaがintに4バイトを書き込んだ場合、4バイトで読み込みます。変更するエンディアンがあれば、バイト配列をC++のintにキャスト(またはコピー)してください
  2. Javaコードを変更することができれば、C++で読める共通のものとして書くことができますUTF-8のテキストまたはアスキー、またはGoogleプロトコルバッファーの形式などがあります。
2

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

char bytes[4]; 
... 
long n = (long(bytes[0]) << 24) | (long(bytes[1]) << 16) | 
     (long(bytes[2]) << 8) | long(bytes[3]) 
関連する問題