推断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式
Posted yxysuanfa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式相关的知识,希望对你有一定的参考价值。
第一个版本号:
//return true in big-endian machines bool check_big_endian1() { int a = 0; int *p = &a; *(char *)p = 1; return a != 1; }
採用union的第二个版本号:
//return true in big-endian machines bool check_big_endian2() { union{ int a; char b; }var;//sizeof(var)=4 var.a = 1; return var.b != 1; }
最后看一个避免函数调用的版本号:
static union { int a; char b; }_s_var_endian_check = {1}; #define ISLITTLEENDIAN (_s_var_endian_check.b == 1) #define ISBIGENDIAN !ISLITTLEENDIAN
这样就能够通过宏ISLITTLEENDIAN和ISBIGENDIAN读取静态变量的值来推断是否是小端模式或者大端模式了。
只是这是C的写法。C++里面能够採用内联(inline)函数来避开对宏的使用。
以上是关于推断CPU 是小端存储(Little endian)还是大端存储(Big endian)模式的主要内容,如果未能解决你的问题,请参考以下文章
字节序:大端和小端(Big endian and Little endian)(转自维基百科)
小端格式和大端格式(Little-Endian&Big-Endian)
小端格式和大端格式(Little-Endian&Big-Endian)
小端格式和大端格式(Little-Endian&Big-Endian)