美文网首页
大端字节序、小端字节序的相互转换

大端字节序、小端字节序的相互转换

作者: huangjinsheng | 来源:发表于2018-03-21 17:27 被阅读0次

2017年下半年应公司需求要写一个日志系统的SDK,日志上报协议使用TCP协议,通过长链接上报,格式如下:


当然我们这里不讨论SDK的设计实现,这里我们只讨论网络字节序(大端字节序)与小端字节序相互转换的问题

首先我们要理解什么是大端模式,什么是小端模式?

大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址

小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址

具体的定义可以看这边文章:大端、小端存储模式概念

由于我的Mac电脑默认的是小端存储模式,因此我需要进行大端的转换,实现代码如下,通过0xff进行位操作很简单就实现了,代码如下

- (NSData *)headDataFormat{
   
    Byte byte[16];
   
    byte[0] = (self.mPackageLength >> 24) & 0xff;
    byte[1] = (self.mPackageLength >> 16) & 0xff;
    byte[2] = (self.mPackageLength >> 8) & 0xff;
    byte[3] = self.mPackageLength&0xff;
   
    byte[4] = (self.mHeadLengh >> 8) & 0xff;
    byte[5] = self.mHeadLengh & 0xff;
   
    byte[6] = (self.mVersion >> 8) & 0xff;
    byte[7] = self.mVersion & 0xff;
   
    byte[8] = (self.mCommand >> 24) & 0xff;
    byte[9] = (self.mCommand >> 16) & 0xff;
    byte[10] = (self.mCommand >> 8) & 0xff;
    byte[11] = self.mCommand & 0xff;
   
    byte[12] = (self.mSessionId >> 24) & 0xff;
    byte[13] = (self.mSessionId >> 16) & 0xff;
    byte[14] = (self.mSessionId >> 8) & 0xff;
    byte[15] = self.mSessionId & 0xff;

    NSData *headData = [NSData dataWithBytes:byte length:sizeof(byte)];
    OMSLogD(@"Head数据:mPackageLength=%d,mHeadLengh=%d,mVersion=%d,mCommand=%d,mSessionId=%d",self.mPackageLength, self.mHeadLengh, self.mVersion, self.mCommand, self.mSessionId);
    return headData;
}

通过byte数组,一个字节一个字节的转换,这种方式对于刚刚接触大端小端模式的我来说就比较好理解了;

同理,大端转小端也可以使用这种方式,简单易懂;

相关文章

  • Linux的socket API基本操作

    1.socket地址API 主机字节序和网络字节序 字节序分为大端字节序和小端字节序 大端字节序 = 一个整数的高...

  • 《Linux高性能服务器编程》

    小端字节序被称为主机字节序 大端字节序被称为网络字节序 长整型函数通常用来转换IP地址,短整型函数用来转换端口号 ...

  • 大端字节序、小端字节序的相互转换

    2017年下半年应公司需求要写一个日志系统的SDK,日志上报协议使用TCP协议,通过长链接上报,格式如下: 当然我...

  • 内存序、字面量、动态规划

    内存字节序 确认内存字节序 /* 确定你的电脑是大端字节序还是小端字节序 */include int check...

  • 字节序

    端模式分为小端字节序与大端字节序。 1. 小端字节序(Little Endian, LE)低字节存于内存低地址,高...

  • socket编程基础

    字节序 字节序分为大端字节序和小端字节序大端字节序: 是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内...

  • (转)字节序、大端序与小端序及其相关转换

    字节序、大端序与小端序及其相关转换https://blog.csdn.net/SwordArcher/articl...

  • 网络通信大端小端转换

    1、 使用说明 大端又叫网络字节序,小端又叫主机字节序,在网络通信传输数据时候,通常是采用大端对齐方式,而在本机电...

  • 理解字节序(转)

    计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。 举...

  • 理解字节序

    1.计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian) ...

网友评论

      本文标题:大端字节序、小端字节序的相互转换

      本文链接:https://www.haomeiwen.com/subject/navsvttx.html