Iphone 如何从NSStreams读取/写入整数

Iphone 如何从NSStreams读取/写入整数,iphone,objective-c,cocoa,Iphone,Objective C,Cocoa,如何从/到NSStreams读取和写入整数?我知道我可以单独读取字节,但我想考虑到字节的长度。Java有数据流对于这些情况,Obj-C中是否有类似的东西?流中没有类似的东西。有标准的ntoh*/hton*函数套件可从网络到主机顺序再转换回来。有NSInputStream read:maxLength:和NSOutputStream write:maxLength: 我不知道objc的等价物,但自己动手并不难: 使用移位运算符一次写入一个字节的整数,并以类似方式读取和重构它们 如果要以big-e

如何从/到
NSStreams
读取和写入整数?我知道我可以单独读取字节,但我想考虑到字节的长度。Java有
数据流
对于这些情况,Obj-C中是否有类似的东西?

流中没有类似的东西。有标准的ntoh*/hton*函数套件可从网络到主机顺序再转换回来。

有NSInputStream read:maxLength:和NSOutputStream write:maxLength:


我不知道objc的等价物,但自己动手并不难:

使用移位运算符一次写入一个字节的整数,并以类似方式读取和重构它们

如果要以big-endian格式编写,请执行以下操作:

for(int i = 0; i < 4; i++) WriteAByteLOL((n >> (8*(4-i-1))) & 0xff);
用于(int i=0;i<4;i++)可写字节(n>>(8*(4-i-1))&0xff);
如果需要小endian,请反转循环顺序

对于读取,请执行以下操作(假设数据位于4字节数组b中):

无符号整数n=0;

对于(inti=0;i<4;i++)n=(n,我不知道是否有套接字层实现

在目标C中,看一看Core Endian参考手册

或者看看Mac OS X中可用的C级XDR例程;外部数据表示(XDR)例程是通用Unix级RPC环境的一部分

或者,您也可以使用自己的字节

gSOAP或XML或其他类似的东西也被分层到这里的应用程序中,以期控制网络流量(如果我能管理的话,我倾向于避免使用我自己的协议)


不管你在用这些东西做什么,记住在你在这里实现的任何网络协议的字节流中插入一个版本号。

是的,但是他们会将一系列字节读到一个字节数组中。我想读取完整的整数,并根据plataform endianness对字节进行排序。
unsigned int n = 0;
for(int i = 0; i < 4; i++) n = (n<<8) | b[i];