C/C 跨平台I/O操作技巧
2008-02-23 05:24:39来源:互联网 阅读 ()
对齐
特定机器上,特定的数据被对齐于特定的边界。假如数据没有正确对齐,结果可能是效率降低甚至崩溃。 当您从I/O源读取数据的时候,确保对齐是正确的。
填充
"填充" 是数据集合中不同元素之间的间隔, 一般是为了对齐而存在。不同编译器和平台下,填充的数量可能会不同。?不要假设结构的大小和成员的位置在任何编译器和平台下都是相同的。 不要一次性读取或写入一整个结构体,因为写入的程式可能会使用和读取的程式不同的填充方式。对于域也同样适用。
类型大小
不同数据类型的大小随编译器和平台而不同。 在C/C 中, 内置类型的大小完全取决于编译器(在特定范围内). 不要读写大小不明确的数据类型。也就是说,不要读写bool, enum, long, int, short, float, 或double类型.(译者注:事实似乎不是这样,我记得C/C 标准规定了一些数据类型的长度,例如short 2字节,long 4字节等等,在符合标准规定的编译器上,使用这些类型能够确保跨平台的正确性)
用这些 | 替代这些... |
int8, uint8 | char, signed char, unsigned char, enum, bool |
int16, uint16 | short, signed short, unsigned short, enum |
int32, uint32 | int, signed int, unsigned int, long, signed long, unsigned long, enum |
int64, uint64 | long, signed long, unsigned long |
int128, uint128 | long long, signed long long, unsigned long long |
float32 | float |
float64 | double |
字节顺序
字节顺序,就是字节在内存中存储的顺序。 不同的处理器存储多字节数据的顺序是不同的。 小端处理器由低到高存储(换句话说,和书写的顺序相反).。大端处理器由高到低存储(和书写顺序相同)。假如数值的字节顺序和读写他的处理器不同,他必须被事先转化。同时,为了标准化网络传输的字节顺序,定义了网络字节顺序。
char - 有符号还是无符号?
一个鲜为人知的事实,char默认能够是有符号的也能够是无符号的-完全取决于编译器。结果导致您从char转化为其他类型的时候(比如int),结果会因编译器而不同。 例如:
char x; int y; read( fd, &x, 1 ); // 读取一个byte值为0xff y = x; // y 是 255 或 -1, 依赖编译器 |
不要把数据读入一般的char。明确指定是有符号或无符号的
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 对C 程式设计中函数重载的探讨
下一篇: Boost源码剖析:C 泛型函数指针类
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash