[英]Array of Char or Storing a string in a struct without a pointer (Not using NSString - I think) in objective C
我正在使用 iPhone 的 cocos 2d 引擎在目标 C 中创建游戏。 目前我正在使用结构向客户端发送数据包和从客户端发送数据包:
typedef struct
{
PacketType type;
CGPoint position;
int amount;
int playerId;
} PacketPlayerDamage;
我的问题是我想以相同的格式发送一个字符串,否则我必须进行一些相当大的更改,理想情况下以下方法可以工作:
typedef struct
{
PacketType type;
NSString *name;
} PacketHello
我相信这不起作用,因为当我打包我的数据包以发送它时,我执行以下操作:
PacketPlayerDamage packet;
packet.type = kPacketTypePlayerDamage;
packet.amount = amount;
packet.playerId = playerId;
NSData* sendPacket = [NSData dataWithBytes:data length:sizeof(packet)];
[self sendToAll:sendPacket];
它无法解开 NSString 并引发错误,可能是因为它不知道结构中该变量的大小/长度。
所以,因为,我真的不想修改我包装或解开我的数据包的方式(我正在将 NSMutableDictionary 转换为 JSON,一切都很好,但这似乎是倒退了一步)但我想允许发送一个字符串(显然固定的字符串长度/大小很好,即 32 个字符),我的问题是....
有没有一种简单的方法来处理没有指针的固定长度字符串目标 C、32 个字符的数组或类似的东西?
我看过以下内容:
UTF8String option1;
Str32 option2;
他们是我要找的吗? 如果是这样,我如何获取最大 32 char NSString 并将其应用于它们(我猜标题不相关......)
谢谢你的帮助,
捷通
您可以在 NSString 上使用- (BOOL)getCString:(char *)buffer maxLength:(NSUInteger)maxBufferCount encoding:(NSStringEncoding)encoding方法。 因此,您将添加一个具有固定长度的 char 数组到您的结构中,并使用上面的方法将 NSString 写入其中:
typedef struct
{
PacketType type;
char name[MAX_LENGTH];
} PacketHello
NSString* toSend = @"blahblahblah";
PacketHello myPacket;
[toSend getCString:myPacket.name maxLength:MAX_LENGTH encoding:NSUTF8StringEncoding];
在接收端,您可以使用- (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding将其转换回 NSString
PacketHello received;
NSString* name = [[NSString alloc] initWithCString:received.name encoding:NSUTF8StringEncoding];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.