嵌入式中多平台开发时大端小端的问题及解决方法之一

/*********************************************************************
 * Author  : Samson
 * Date    : 03/10/2014
 * Test platform:
 *              Linux ubuntu 3.2.0-58-generic-pae
 *              GNU bash, version 4.2.39
 * *******************************************************************/
   

       大端小端的问题在不同平台间的问题比较严重,一个平台支持大端的,而另一端支持小端的,这样就存在大于一个字节的数据结构的内存存储形式不是一致的,若是要使用htonl htons ntohl ntohs 这四个函数的话,那么需要知道不同平台间的cpu是支持大端还是小端的,大端的为网络序,关于如何判断大端或小端的方法,可参照,有的时候在支持大端的设备上调用这4个函数的结果是一样的,这个其实是在此函数的实现中有对平台进行了判断,所以结果还是和没有处理前是一样的.


       这种情况如何解决呢? 因为大端小端涉及到的是大于一个字节的数据,那么可以进行移位操作把多字节的数据拆分成多个单字节,在接收端再进行移位操作把拆分的多个单字节进行组合,这样就能够很好的解决这个问题。

例子:把一个short类型的数值转换为两个char
short aa = 0x1256;
char datalen1, datalen2;
datalen1 = aa & 0x00ff;
datalen2 = (aa & 0xff00) >> sizeof(char);

struct send_ctrl_t
{
    char data_len1;
    char data_len2;
};

把两个char转换回一个short类型数值
int get_short_fromchar(send_ctrl_t *modctr)
{
    int datalen = 0;
    datalen = modctr->data_len1;
    datalen = (unsigned short)(datalen << 8) ;
    datalen = datalen | ((unsigned short)modctr->data_len2);
    return datalen;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值