结构到NSData到结构?

nin*_*eer 22 iphone xcode objective-c ios4

我有以下结构:

typedef enum
{
    kPacketTypeJoin = 1,
    kPacketTypeServerAcceptedJoin,
    kPacketTypeSelectedNumber,
} PacketTypes;    
typedef struct
{
    PacketTypes type;
    NSString *name;
} PacketJoin;
Run Code Online (Sandbox Code Playgroud)

我如何将PacketJoin转换为NSData并再次转换回PacketJoin?

Cal*_*leb 39

// make a NSData object
NSData *myData = [NSData dataWithBytes:&myPacketJoin length:sizeof(myPacketJoin)];

// make a new PacketJoin
PacketJoin newJoin;
[myData getBytes:&newJoin length:sizeof(newJoin)];
Run Code Online (Sandbox Code Playgroud)

  • 你不能,这就是你不应该为此目的使用NSString的原因.您需要将字符串转换为可以存储在结构中的字节数组.或者,使PacketJoin成为对象而不是结构.然后,您可以实现NSCoding并将对象存档到NSData,这将为您提供可以安全发送的字节流.[阅读本文.](http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html) (3认同)
  • 它将复制结构中包含的指针.NSString对象本身在结构外部,不会包含在数据中. (2认同)
  • @Ninja,如果你打算存储/发送这些数据,NSString将不会被发送,不会.您将最终得到原始设备上字符串*为*的内存地址. (2认同)