iOS网络字节序列转换
来源:互联网 发布:网络编辑的工资 编辑:程序博客网 时间:2024/06/04 22:46
iOS网络字节序列转换
最近项目使用字节流的方式传输数据,数据包中包含数据的大小等相关的一些基础信息需要将字节转换成网络字节流的方式进行传输,因为之前一直使用的是Http或者用分隔符的方式去解决socket传输中引起的粘包问题,第一次接触网络字节流的概念.后来查询才知道原来对于不同的系统和不同的cpu中转换相同的数据可能大端和小端在字节的排序是不一致的,为了保持统一,出来了一个网络字节流的标准。
在iOS中是有自带的方法去进行转换的,但是在使用的时候要注意转换所要求的长度。
#define NTOHL(x) (x) = ntohl((__uint32_t)x) //转换成本地字节流#define NTOHS(x) (x) = ntohs((__uint16_t)x) //转换成本地字节流#define NTOHLL(x) (x) = ntohll((__uint64_t)x) //转换成本地字节流#define HTONL(x) (x) = htonl((__uint32_t)x) //转换成网络字节流#define HTONS(x) (x) = htons((__uint16_t)x) //转换成网络字节流#define HTONLL(x) (x) = htonll((__uint64_t)x) //转换网络字节流
//HTONL 转换成网络字节序 int32_t packetlength = 0; int16_t headerLength = 0; int16_t version = 1; int32_t commandID = CMD_ID_AUTH_TOKEN_REQ; int32_t seqNo = 1; HTONL(commandID); NSData *commonData = [NSData dataWithBytes:&commandID length:sizeof(commandID)]; HTONS(version); NSData *versionData = [NSData dataWithBytes:&version length:sizeof(version)]; HTONL(seqNo); NSData *seqNoData = [NSData dataWithBytes:&seqNo length:sizeof(seqNo)]; headerLength = versionData.length + commonData.length + seqNoData.length; HTONS(headerLength); NSData *headerData = [NSData dataWithBytes:&headerLength length:sizeof(headerLength)]; packetlength = NTOHS(headerLength) + headerData.length+fileData.length; HTONL(packetlength); NSData *packetLengthData = [NSData dataWithBytes:&packetlength length:sizeof(packetlength)]; NSMutableData *mdata = [NSMutableData data]; [mdata appendData:packetLengthData]; [mdata appendData:headerData]; [mdata appendData:versionData]; [mdata appendData:commonData]; [mdata appendData:seqNoData]; [mdata appendData:fileData];
当接收到服务器返回数据的时候记得要转成本地字节序.
阅读全文
0 0
- iOS网络字节序列转换
- 网络编程中的字节序列转换(linux下)
- 网络字节序列,本机字节序列
- 主机字节序列和网络字节序列
- Java字节序(不同语言中的网络数据传输时字节序列转换)
- Java字节序(不同语言中的网络数据传输时字节序列转换)
- iOS基础之网络字节顺序的转换
- 网络字节顺序转换
- 网络字节转换
- 网络字节序转换
- linux网络字节转换
- 网络字节序转换
- 字符串转换成字节序列
- 主机字节序和网络字节序列
- 网络字节序 主机字节序 转换
- double 转换成网络字节
- 网络传输过程中的字节序列问题
- 网络字节序转换函数(64位)
- Unity扩展Editor菜单:提供一个统一的接口,来让策划调节prefab里相关脚本的数值
- 编译android用的ijkplayer
- JAVA深入研究——Method的Invoke方法。
- AndroidUI系列
- Android :判断网络是否连接,并设置连接网络
- iOS网络字节序列转换
- springboot配置文件大全
- Personal career schedule
- 防止ssh命令卡死的方法
- 采购订单PB00含税价价税分离实现方式之一
- github生成本地公钥、clone代码、上传本地代码到git汇总
- RabbitMQ之延迟消息
- Swift_字符串处理
- 暑期项目开发实训 Day4