【发布时间】:2009-07-23 03:33:03
【问题描述】:
如何去做这件事?另外,有没有简单的方法可以做到这一点?使用 Boost 之类的库?
【问题讨论】:
如何去做这件事?另外,有没有简单的方法可以做到这一点?使用 Boost 之类的库?
【问题讨论】:
写出 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;
【讨论】:
sizeof(int) != 4 的平台。或者整数是一个补码或符号位,而不是二进制补码(ISO C99 都允许)。
唯一的跨平台方法是逐字节读取它(即char by 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])
【讨论】:
想法:
【讨论】: