C++编程语言对于编程人员来说是非常重要的一个计算机应用语言。我们今天会在这篇文章中为大家详细介绍一下C++ Endian的基本应用方式,希望朋友们可以从中对C++编程语言有一个深刻的了解。#t#
最近写了一段代码来读取和输出一个文件.这个文件的标准规范里面同时使用了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++ Endian基本概念的讲解