这是我的znFAT中对大小端无关性的处理:
/***********************************************************************************
功能:由一个小端排列的字节序列,计算得到其在某一字符长度下所表达的整型值
形参:dat:指向字节序列的指针 len:将字节序列的前len个字节计算整型值
返回:计算得到的整型值
详解:这一函数是屏蔽不同CPU在大小端上的差异的主要手段。比如对于一个小端的4字节序列
unsigned char *p={0X12,0X34,0X56,0X78} 如果我们想把它合成为一个4字节整型,如
unsigned long,那么可以这样来作 *((unsigned long *)p),但对于不同的CPU,因变
量在RAM中的字节排列顺序不同,即大小端问题,则其所表达的整型值可能为0X12345678
或 0X78563412,这将会出现错误。为了屏蔽这种差异,引入了此函数,通过对字节序列
进行计算,最后将可以得到正确的值,对于上例中的字节序列,通过此函数的计算Bytes
2Value(p,4)值一定为0X12345678。
***********************************************************************************/
UINT32 Bytes2Value(UINT8 *dat,UINT8 len)
{
UINT32 temp=0;
if(len>=1) temp|=((UINT32)(dat[0])) ;
if(len>=2) temp|=((UINT32)(dat[1]))<<8 ;
if(len>=3) temp|=((UINT32)(dat[2]))<<16;
if(len>=4) temp|=((UINT32)(dat[3]))<<24;
return temp;
}
|