通过TCP的memcpy sizeof(typname)交叉应用程序的C/C++可靠性

Jak*_*ake 0 c++ byte

我在我正在进行的项目中一直在做一些文件IO,到目前为止,我使用以下快速方便的方法读取整个数据块:

struct Header { ... };
class Data { ... };
// note that I have not used compiler directives to pack/align/order bytes
// partly because I don't know how to.

Header _header;
Data _data;
std::ifstream fin(filename);
fin.read((char*)&_header, sizeof(Header));
fin.read((char*)&_data, sizeof(Data));
fin.close();
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以假设字节是对齐的,并为每个编译器和每个不同的计算机以相同的方式排序?

例如,如果我采用Header结构并在linux上编译客户端程序,在Windows上编译服务器程序.这些字节的顺序是否相同,以便接收和发送两种方式都没有问题?

Pup*_*ppy 6

不,这根本不能保证.有一个特定的网络字节顺序,据我所知,WinAPI和POSIX都提供本地网络转换功能.此外,您可以使用编译器指令控制对齐.但你必须明确地处理这两件事.