大小端安全简单访问技巧
bool srs_is_little_endian() { // convert to network(big-endian) order, if not equals, // the system is little-endian, so need to convert the int64 static int little_endian_check = -1; if(little_endian_check == -1) { union { int32_t i; int8_t c; } little_check_union; little_check_union.i = 0x01; little_endian_check = little_check_union.c; } return (little_endian_check == 1); }
通过上面代码片段可发现little_check_union的大小只有4个直接,通过访问最后一个字节来判断当前平台(软件+硬件平台)大小端情况。
同时也可以利用union来进行访问,这样的访问方式较直接安位操作来说简单性能差一些,但也只一种较为简便和安全的做法。(虽然不是绝对安全的做法)