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

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

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

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

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

代码相当直观:

1.判断CPU的C++ Endian:

union {  


short s;  


char c[sizeof(short)];  


} un;  



un.s = 0x0102;  




_isLittleEnd = (un.c[0] == 0x2); 

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

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

void Helper::swap(char ch[], int count) {  



int size = count / 2;  




int max = count - 1;  




for (int i = 0; i < size; i++) {  




char t = ch[i];  



ch[i] = ch[max - i];  


ch[max - i] = t;  


} 

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

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

以int 为例的代码如下:

int Helper::swap(int data) {  


union {  


int _i;  


char _c[sizeof(int)];  


} un;  



un._i = data;  



swap(un._c, sizeof(int));  


return un._i;  


} 

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

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

c++

相关推荐