2014-04-27 30 views
1

我想读网络字节顺序格式的C++文件。C++读网络字节顺序的文件

到目前为止,我试着用(只读取第一个整数(2字节)):

ifstream in ("input.dat", ios::in|ios::binary); 
unsigned short x; 
in >> x; 

和一些其他的解决方案,我在网上找到。 似乎没有工作。

Thak你在前进,

+2

检查'ntohs()'和'ntohl()'函数。 –

回答

3

in >> x没有什么意义,如果你啜此为二进制数据。 operator >>用于格式化的提取。你应该有可能使用std::istream::read()方法及ntohs()

像这样的东西它后面:

#include <cstdint> 
#include <netinet/in.h> 

ifstream in ("input.dat", ios::in|ios::binary); 
uint16_t x; 

if (in.read(reinterpret_cast<char*>(&x), sizeof(x))) 
{ 
    x = ntohs(x); 

    // use x here 
} 

...假设你的文件是原始的二进制。还要注意改变类型。对于任何平台独立性而言,读取条目的优点是16位宽,作者也应该意识到这一点。

+0

你好,字符相当于什么? 谢谢!!! – magodiez

+0

@magodiez你是说你是指相当于位型的?即'int8_t'或'uint8_t'?如果你指的是'ntohs'的等价函数,那么没有。这些函数解决了endian无关的问题,并且单字节值不适用。 – WhozCraig

相关问题