从C ++中java的writeInt方法写的文件中读取一个int?

时间:2009-07-23 03:33:04

标签: java c++ int iostream

怎么会这样做呢?还有,有一个简单的方法吗?使用像Boost这样的lib或什么?

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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])

答案 2 :(得分:0)

思路:

  1. 以直接二进制形式读取,然后根据需要转换/解释字节。因此,如果Java为int写出4个字节,那么您将读取4个字节。如果要更改任何字节序,那么执行该操作,然后将字节数组转换(或复制)到c ++ int
  2. 如果您可以更改Java代码,您可以将其编写为C ++可以读取的常见内容,如UTF-8文本或ascii,或Google Protocol Buffers格式或其他内容。