写磁盘时应该注意:
(引自短歌老大)直接fwrite并非不可以,只是可移植性太差。一般我们把数据写入文件都是为了进行数据交换,而直接把一个结构体用一次fwrite调用写入文件后是否可以再用一次fread正确读出取决于写入代码和读出代码编译时的字长、对齐逻辑和字节序等问题(这句话长点,大家凑合着看),严重影响可移植性。
把一个结构体写入文件时我觉得要注意以下几点:
1:要按不同域分别写入,以避免对齐方式的影响;
2:要设计好不同数据的长度,不要用sizeof来获得,以避免字长的影响;
3:要设计好字节顺序,每次写入一个字节,以避免 字节序的影响;
4:要存储逻辑结构而不是数据结构。比如当存储链表时按顺序存储数据读取时再重新组织为链表,而不要去考虑如何存储链接域。
写入网络好说了:
1)首先要清楚是否有机器位宽不一致的情况,如32位机和64位机。如果位宽不一致,则避免传输表示方 式 不一致的数据类型,如long、float型在32位了64位下表示方式不一致,会导致数据解析错误。
2)确认通信双方的对齐位宽一致,或自己保证传输的数据结构在对齐调整后不会产生大小不一致。如果收发 双方的对齐方式分别是按4和8字节对齐,则需要在程序中明确制定对齐位宽;或者调整数据的结构,确保在 对齐调整后,收/发的数据中每一项的偏移量一致。
3)尽量对发出去的数据都转换成网络字节序,接收后转换回本地字节序,特别是机器字节序不一致时,现有 的字节序转换函数不能满足所有需求。
4)某些数据类型的表示方式有不同,如浮点数(一般用IEEE 794标准),不能认为正确的传了一个字节序 正确的8字节double型就对了,不同平台对double型的表示方式不同,比如发送1.003,接受没问题,结果却 得到了其它的数值。
分享到:
相关推荐
在网络通讯过程中往往涉及一些有关联的参数传递,例如结构体之类的。对于结构体其实方法挺简单,由于结构体对象在内存中分配的空间都是连续的,所以可以将整个结构体直接转化成字符串发送,到了接收方再将这个字符串...
struct typedef struct 区别
struct2第一个struct2,简单的struct2例子,struct2,struct2
typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化 typedef struct 与 struct 的区别及初始化
点对点文件传输,基于gcc,有简单的连接审核。 int main(int argc, char *argv[]) { int fd,new_fd,struct_len,numbytes,total_read=0; struct sockaddr_in server_addr; struct sockaddr_in client_addr; char ...
structtype&def_struct的使用及区别。
ip structip structip structip structip structip structip structip structip structip structip structip structip structip structip ...structip structip structip structip structip structip structip struct
。。。
。。。
赠送jar包:mapstruct-1.2.0.Final.jar; 赠送原API文档:mapstruct-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.2.0.Final.pom; 包含翻译后...
赠送jar包:mapstruct-1.1.0.Final.jar; 赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.1.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom; 包含翻译后...
开源地址 https://github.com/whr-helen/go-struct-auto 自动构建工具使用 安装包命令:go get github....命令(支持linux或mac或windows):go run automatic.go -d dbname -acc root -pwd 123123 -t account
socket传输结构体的解决办法,一般的socket只能传输字符串,怎么解决这个问题呢?看看这个吧
赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...
赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...
java struct2 收集整理的 一些资料 比如struct1和struct2的区别概述等
c++笔记struct和typedef struct彻底明白了
共享struct2string由结构体变量获得其创建语句-struct2string.rar 本帖最后由 黄小标 于 2012-9-27 21:19 编辑 struct2string 顾名思义就是将struct变量变成字符串,此处字符串是此变量的创建语句。 不才,...
struct框架的搭建,搭建struct框架。
struct和union struct和union