大端模式:
- 数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中
小端模式:
- 数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中
在计算机系统中,是以字节为单位的,每个地址单元都对应着一个字节,在C语言中除了8bit的char之外,还有16bit的short型,32位的int型,对于16bit或者32bit处理器,寄存器宽度大于一个字节,那么必然存在如何将多个字节安排的问题,因此就导致了大端和小端存储的问题
大小端测试
int main()
{
short x;
char x0,x1;
x = 0x1122;
x0 = ((char*)&x)[0];//低地址单元
x1 = ((char*)&x)[1];//高地址单元
printf("x0=0x%x,x1=0x%x\n",x0,x1);
return 0;
}
大小端转换:
#define sw16(x)\
((short)(\
(((short)(x)&(short)0x00ff)<<8)|\
(((short)(x)&(short)0xff00)>>8)))
typedef unsigned int UInt32;
#define Tranverse32(X) ((((UInt32)(X) & 0xff000000) >> 24) | /
(((UInt32)(X) & 0x00ff0000) >> 8) | /
(((UInt32)(X) & 0x0000ff00) << 8) | /
(((UInt32)(X) & 0x000000ff) << 24))
void right_shift_r(const char* src, char* result, unsigned int n)
{
const unsigned int LEN = strlen(src);
int i = 0;
for(i=0; i < LEN; i++)
{
result[(n + i) % LEN] = src[i];
}
result[LEN] = '\0';
}