大端小端模式

1 大小端判别

    读取文件时,对于多字节的数据,大端模式和小端模式的判别很重要。根据参考资料[1],下面给出一个在32位系统中判别cpu的字节序的函数。

1.1 辨别方法1

#include <stdint.h>
bool IsBigEndian()
{
	int a = 0x12345678;
	char b =  *(char *)&a;  //通过将int强制类型转换成char单字节,通过判断起始存储位置。即等于 取b等于a的低地址部分
	if( b == 0x12) {
		return true;
	}
	return false;
}

1.2 辨别方法2

    根据参考资料[5],大小端的判别代码如下

/*
 * return 1 : little-endian, 
 *		  0 : big-endian
 */
int checkCPUendian(){
	union {
		unsigned int a;
		unsigned char b;            
	}c;
	c.a = 1;
	return (c.b == 1);      
} 

2 大小端转换

    参考资料[3]给出了大小端转换的宏定义

  #include <stdint.h>
  #define Tranverse16(X)  ((((uint16_t)(X) & 0xff00) >> 8) |(((uint16_t)(X) & 0x00ff) << 8))
  #define Tranverse32(X)  ((((uint32_t)(X) & 0xff000000) >> 24)|\
                          (((uint32_t)(X) & 0x00ff0000) >> 8)|\
                          (((uint32_t)(X) & 0x0000ff00) << 8)|\
                          (((uint32_t)(X) & 0x000000ff) << 24))

参考资料

[1]详解大端模式和小端模式

[2]轻松记住大端小端的含义(附对大端和小端的解释)

[3]大端小端转换

[4]计算机中的小端模式和大端模式  

[5]大端小端(Big- Endian和Little-Endian)

你可能感兴趣的:(大端小端模式)