[英]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.