• 网络学院
  • IT资讯
  • 操作系统
  • 网络技术
  • 软件应用
  • 办公软件
  • 编程技术
  • 网站架设
  • 数据库类
  • 平面设计
  • 多媒体类
  • 游戏资讯
  • 教学论文
  • 认证考试
C/C++
  站点:
  • 首 页
  • 最新软件
  • 文章教程
  • 国内软件
  • 国外软件
  • 绿色软件
  • 源码下载
  • 字体下载
C/C++ 跨平台I/O操作技巧
软件发布 C/C++ 跨平台I/O操作技巧
网络软件 系统工具 应用软件 联络聊天 图形图像 多媒体类 行业软件 游戏娱乐 编程开发 安全相关 教育教学 数码软件 绿软下载
热门软件: QQ 瑞星 pplive e话通 木马克星 千千静听 office2000 五笔字根 Photoshop 视频分割
返回文章教程首页 >> 文章首页 >> 编程技术 >> C/C++教程 >> C/C++ 跨平台I/O操作技巧

C/C++ 跨平台I/O操作技巧

添加时间: 2006-2-15 3:17:45  作者: C++教程  阅读次数:149   来源: http://d9soft.com

        如果你正在写从文件或网络读写数据的跨平台C/C++代码,那么你必须明白有些问题是因语言,编译器,平台而不同的。 主要的问题是数据对齐,填充,类型大小,字节顺序和默认状态char是否有符号。

  对齐

  特定机器上,特定的数据被对齐于特定的边界。如果数据没有正确对齐,结果可能是效率降低甚至崩溃。 当你从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。明确指定是有符号或者无符号的

 

上下文章:

 

上一篇文章: C编写Windows服务程序的五个步骤 下一篇文章: C++/CLI实战——HELLO

相关文章:

  • 上网高效率 宽带路由优化技巧放送
  • Photoshop技巧:让模糊照片变清晰
  • Oracle认证数据库备份技巧
  • 通过JDBC连接oracle数据库的技巧
  • 如何通过JDBC连接oracle数据库的技巧

相关软件:

  • 白金模拟炒股平台 V3.6
  • 宽盈垂直行业门户网站平台系统3100 1.2
  • 宽盈地方城市门户网站平台系统5100 1.1
  • 浩辰ICAD平台软件ICAD2007i 标准版
  • 浩方对战平台 4.8.3(SP3) 客户端
  • 万能五笔2004输入法平台 6.41版 10万大词库版

 

快速导航

  • 网络学院
  • 精品汇聚
  • 字体下载
  • 教程下载
  • ASP源码
  • PHP源码
  • Net源码
  • JSP 源码

编程技术分类导航

  • ASP & ASP.NET教程
  • PHP教程
  • JSP教程
  • C/C++教程
  • VB & VB.NET教程
  • VC教程
  • Delphi教程
  • BCB教程
  • VFP教程
  • PB教程
  • JAVA教程
  • XML教程
  • C#教程
  • CGI教程

本类经典文章推荐

  • C/C++作用域引申出的编码规范
  • 程序宝典:C++学习感想
  • C语言:黑客学员必修课(一)
  • C语言:黑客学员必修课(二)
  • 使用多线程实现数据实时采集
  • C++编程中的四个调试小技巧
  • C语言程序设计基础之联合
  • 学C++不得不看的一篇文章
  • C,曾经的程序员梦
  • 水滴石穿C语言之可变参数问题

C/C++教程阅读排行

  • 学C++不得不看的一篇文章
  • 水滴石穿C语言之可变参数问题
  • C语言:黑客学员必修课(一)
  • 程序宝典:C++学习感想
  • 我的Visual C++入门之路
  • 初学者学习C++的50条忠告
  • C++中的struct专题研究
  • C++箴言:只要可能就用const
  • 强大的语言——C入门
  • C++编程中的四个调试小技巧

编程技术阅读总排行

  • VB入门教程之一
  • Java连接数据库实例
  • 第二章 PowerBuilder 入门之创建新...
  • VC++之List Box/Check List Box控...
  • 第一章 什么是PowerBuilder
  • VC++ List Ctrl控件
  • VC++ Combo Box/Combo Box Ex控件
  • 学C++不得不看的一篇文章
  • VB入门教程之二
  • VC++之Button控件

广告位置

字母检索 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 回到顶部

关于我们 | 版权声明 | 免责条款 | 广告联系 | 软件发布 | 下载帮助 | 下载排行 | 网站地图 | 特别鸣谢 | 友情连接

copyright; 2005-2008 D9soft.com 第九软件网 版权所有