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)对于无符号数这个算法是否正确.因为这个文件规范里面不会出现这两种数.
相关推荐
文山羊 2020-11-07
susmote 2020-11-07
拉斯厄尔高福 2020-11-04
xceman 2020-10-23
hellojunz 2020-10-23
caojhuangy 2020-10-12
xinyupan 2020-09-28
lousir 2020-09-27
一个逗逗 2020-09-22
Maryhuan 2020-09-20
rkhstar 2020-09-09
DreamSnow 2020-09-09
aehousmantao 2020-09-03
tkernel 2020-09-03
abfdada 2020-08-26
svap 2020-08-25
二十不悔三十而立 2020-08-19
FlightForever 2020-08-17
joyjoy0 2020-08-13