C++ Endian具体操作方法讲解

开发 后端
我们今天为大家介绍的C++ Endian将会通过代码示例的讲解来详细解读其应用方式以及技巧。希望大家可以从中获得一些帮助。

C++编程语言对于编程人员来说是非常重要的一个计算机应用语言。我们今天会在这篇文章中为大家详细介绍一下C++ Endian的基本应用方式,希望朋友们可以从中对C++编程语言有一个深刻的了解。#t#

最近写了一段代码来读取和输出一个文件.这个文件的标准规范里面同时使用了LittleEndian和BigEndian.***次在C++中接触这个问题.所以需要做一下工作:

1.判断当前CPU使用哪种C++ Endian?

2.如果当前数据的Endian和当前CPU相反,如何装换?

代码相当直观:

1.判断CPU的C++ Endian:

  1. union {  
  2. short s;  
  3. char c[sizeof(short)];  
  4. } un;  
  5. un.s = 0x0102;  
  6. _isLittleEnd = (un.c[0] == 0x2); 

 

***的_isLittleEnd是一个bool变量用来保存判定的结果:

2.如何把一个相反C++ Endian的数据转换过来:

  1. void Helper::swap(char ch[], int count) {  
  2. int size = count / 2;  
  3. int max = count - 1;  
  4. for (int i = 0; i < size; i++) {  
  5. char t = ch[i];  
  6. ch[i] = ch[max - i];  
  7. ch[max - i] = t;  

其实是将char[]数组就地反转.

3.如何把short/int/double等数据反转过来呢:

以int 为例的代码如下:

 

  1. int Helper::swap(int data) {  
  2. union {  
  3. int _i;  
  4. char _c[sizeof(int)];  
  5. } un;  
  6. un._i = data;  
  7. swap(un._c, sizeof(int));  
  8. return un._i;  

 

到目前为止,用这个算法做的数据转换还没有发现错误的情况.也许是没碰到罢了.

例如 我没有测试1)对于负数这个算法是否正确.2)对于无符号数这个算法是否正确.因为这个文件规范里面不会出现这两种数.

内容比较基础.但觉得值得分享。在首页上挂一会. 出去腐败一把,回来再撤销(如果回来还比较清醒的话).

以上就是对C++ Endian基本概念的讲解

责任编辑:曹凯 来源: 博客园
相关推荐

2010-02-03 13:26:53

C++计时

2010-02-02 13:57:31

C++解析#pragm

2010-02-02 16:23:46

C++实现WPF动画

2010-03-05 15:27:06

Python文件路径

2010-01-07 15:37:35

VB.NET ForNext循环

2009-12-30 16:48:52

Silverlight

2010-04-02 08:42:32

Oracle 游标

2010-01-27 18:00:57

Android开机自启

2010-03-05 17:06:26

Python显示UTF

2010-04-13 17:00:27

Oracle NLS_

2010-01-28 16:14:33

Android安装卸载

2010-02-01 14:33:05

C++实现RTTI

2010-03-19 14:19:58

Python正则表达式

2010-03-24 10:06:37

Python嵌入C++

2011-03-17 09:06:58

iptables映射端口

2009-12-30 15:47:40

Silverlight

2010-02-03 10:23:47

C++操作符重载

2010-08-02 12:34:09

ADSL代理设置

2009-12-31 15:36:13

SilverLight

2010-01-15 15:51:43

VB.NET类添加方法
点赞
收藏

51CTO技术栈公众号