2009-07-23 59 views

回答

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; 
+0

一切都很好,直到你打到一个平台'sizeof(int)!= 4`。或者一个整数是补码或符号位,而不是二进制补码(全部由ISO C99允许)。 – 2009-07-23 03:50:47

0

思路:

  1. 读它作为标准二进制,然后转换/解释必要的字节。所以如果Java为int写出了4个字节,那么你可以读取4个字节。如果有任何endian-ness改变然后这样做,然后投掷(或复制)字节数组到一个c + + int如果你可以改变Java代码,你可以把它写出来,像C++可以读取一样UTF-8文本或ascii,或谷歌协议缓冲格式或其他。
2

唯一跨平台的方式来做到这一点是阅读逐字节(即char通过char),并建立了它们的整数。您希望使用long,因为int不保证足够宽以保存32位值。我假设你已经阅读了字节到这里char[4]阵列(其他答案已经演示了如何做到这一点):

char bytes[4]; 
... 
long n = (long(bytes[0]) << 24) | (long(bytes[1]) << 16) | 
     (long(bytes[2]) << 8) | long(bytes[3])