gpt4 book ai didi

iphone - iOS 开发 : How can I encapsulate a string in an NSData object?

转载 作者:行者123 更新时间:2023-11-28 18:45:24 24 4
gpt4 key购买 nike

我正在 iPhone 上构建多人游戏,我需要将字符串数据发送给游戏中的其他玩家。为此,我需要以某种方式将 NSString* 字符串数据封装在 NSData 对象中。这是我的代码结构的示例...

typedef struct 
{
PACKETTYPE packetType;
??? stringToSend; //<---not sure how to store this
} StringPacket;

StringPacket msg;
msg.packetType = STRING_PACKET;
msg.stringToSend = ... // <---not sure what to do here
NSData *packet = [NSData dataWithBytes:&msg length:sizeof(StringPacket)];

所以我的问题是,如果 StringPacket 是在我的 header 中定义的结构,那么 stringToSend 属性应该是什么类型,以便我可以轻松调用 dataWithBytes NSData 方法将数据包封装在 NSData 对象中?

谢谢你的智慧!

最佳答案

首先,您应该通过 [NSString UTF8String] 将您的 NSString 转换为 UTF8 表示形式。在那之后,我建议存储在数据包字符串长度中,然后是字符串字符本身。所有这些都可以通过附加 NSData 来完成,NSData 是通过 [NSData dataWithBytes:] 从 char* 创建的

NSMutableData packet = [[NSMutableData alloc] init];
[packet appendBytes:&msg.packetType, sizeof(msg.packetType)];
char *str = [yourString UTF8String];
int len = strlen(str);
[packet appendBytes:(void*)&len, sizeof(len)];
[packet appendBytes:(void*)str, len];

要解析数据包,你应该这样做:

NSData packet; // your packet
[packet getBytes:(void*)&packet.msg range:NSMakeRange(0, sizeof(packet.msg))];
int len;
[packet getBytes:(void*)&len range:NSMakeRange(sizeof(packet.msg), sizeof(len)];
NSData *strData = [packet subdataWithRange:NSMakeRange(sizeof(packet.msg) + sizeof(len)), packet.length];
NSString *str = [[NSString alloc] initWithData:strData encoding:UTF8Encoding];

由于我是凭内存写的,所以可能会有一些错误,但我想你会明白的。

关于iphone - iOS 开发 : How can I encapsulate a string in an NSData object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4635018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com