NSString*到Char [](GameCenter发送结构)

PRN*_*ios 0 c iphone objective-c ios game-center

我想发送struct给GameCenter中的另一个玩家.我已经阅读了关于此的其他问题,但是,我无法让它们中的任何一个工作.

我需要@"1234"进入char[4] (ex char [0] ='1',char [1] ='2'等)

我试过了[NSString UTF8String],但它似乎没有做我想要的.

它分配很好,但当我把它拉回来NSString *[NSString stringWithUTF8String:],它返回空白.

如果有人能告诉我往返的转换,我们将不胜感激.

谢谢.

编辑:

我无法让它工作:/这是我的代码(删节版本):

Matchmaker.h

enum { NChars = 4 };

typedef struct {
    MessageType messageType;
} Message;

typedef struct {
    Message message;
    char code[NChars];
} MessageGameCode;

@interface Matchmaker : CCLayer <GameCenterMasterDelegate>{

    NSString *_code;
}
@property (nonatomic,retain) NSString *_code;
Run Code Online (Sandbox Code Playgroud)

Matchmaker.m

@synthesize _code;
-(void)viewDidLoad{
    self._code = @"1234";
}

- (void)sendCode {
    NSLog(@"Sending Code....");
    MessageGameCode message;
    message.message.messageType = kMessageTypeGameCode;
    NSString * const source = self._code;

    const char* const sourceAsUTF8 = source.UTF8String;

    for (size_t idx = 0; idx < NChars; ++idx) {
        message.code[idx] = sourceAsUTF8[idx];
    }
    NSData *data = [NSData dataWithBytes:&message length:NChars];    
    [self sendData:data];
}

- (void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID {
    Message *message = (Message *) [data bytes];
    if (message->messageType == kMessageTypeGameCode) {        

        MessageGameCode *codeMessage = (MessageGameCode *)[data bytes];
        self._code = [[NSString alloc] initWithBytes:codeMessage->code length:NChars encoding:NSUTF8StringEncoding];
        [self setGameState:kGameStateWaitingForStart];
        NSLog(@"Game Code Recieved");
        NSLog(@"Recieved Code: %@",self._code); //This always shows self._code as blank

    }
}
Run Code Online (Sandbox Code Playgroud)

jus*_*tin 7

您的尝试将失败,因为您传递给的cstring + [NSString stringWithUTF8String:]未终止.

试试这个:

NSString * result = [[NSString alloc] initWithBytes:bytes
                                             length:4
                                           encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

编辑

更完整的演示:

enum { NChars = 4 };
/* requires error checking */
void transmit() {
    NSString * const source = @"1234";

    char tmp[NChars] = { 0 };
    const char* const sourceAsUTF8 = source.UTF8String;

    for (size_t idx = 0; idx < NChars; ++idx) {
      tmp[idx] = sourceAsUTF8[idx];
    }
    /* .. */
}

/* requires error checking */
void receive(const char bytes[NChars]) {
    NSString * result = [[NSString alloc] initWithBytes:bytes length:NChars encoding:NSUTF8StringEncoding];
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)