C++ C++;平台兼容性
对象C++ C++;平台兼容性,c++,C++,对象foo被写入平台1上的新文件,如下所示: write( file, &myFoo, sizeof(struct foo) ); …然后在平台2上使用以下内容阅读: read(file, &myFoo, filesize(file) ); foo对象具有以下定义: struct foo { char a; int b; long c; char* d; }; 在平台2上加载foo时可能会出现什么问题?各种问题 我们不知道在不同的平
foo
被写入平台1上的新文件,如下所示:
write( file, &myFoo, sizeof(struct foo) );
…然后在平台2上使用以下内容阅读:
read(file, &myFoo, filesize(file) );
foo
对象具有以下定义:
struct foo
{
char a;
int b;
long c;
char* d;
};
在平台2上加载foo
时可能会出现什么问题?各种问题
我们不知道在不同的平台上,char
、int
、long
或char*
的大小是否相同
d指的东西怎么了
成员之间也可能存在填充,这可能因平台而异。大端和小端系统将以不同的顺序存储整数和指针的字节。如果你真的很不走运,可能还有一个中段系统。当你这样做时,你需要注意:
- 数据类型大小(
是唯一可以信任的大小)char
- 对齐/填充
- Endianness
- 指向无效内存
- 浮点表示法
vsASCII
?(真的吗?)EBCDIC
- 可能是其他人
最后一个是endian 这听起来很像家庭作业,
Foo
可能没有正确写出,因为您没有测试write
的错误返回。还有很多其他的问题,这些问题已经被解决了很多次。这不是家庭作业,而是我的工作面试测试,我觉得我完全被炸了!我只是想通过所有的问题,找出我做错了什么!很抱歉“char是你唯一可以信任的人”——这不是一种有用的方式sizeof(char)
是1,但是如果平台1上的char\u位
是16,平台2上是8,那么当文件从一个系统传输到另一个系统时,必须给出一些信息。实际上,16位字符系统可能没有文件系统,而9位系统是如此古老,没有人关心,但原则上你甚至不能相信char
…他接受了这一点,没有询问middle endian?吓人。和别人一起笑,而不是嘲笑他们。这是非常接近被标记。真的需要居高临下吗?你给答案增加了什么价值。