2013-11-22 46 views
1

我需要通過網絡發送數據作爲NSData。作爲格式可以僅在運行時確定(例如:消息類型,對象等,類型的對象的數目),我使用以下代碼來/去分組的NSData爲什麼下面的代碼從NSData返回不正確的值?

要打包:

NSMutableData *data = [NSMutableData dataWithCapacity:0]; 
unsigned int _state = 66; 
[data appendBytes:&state length:sizeof(state)]; 

要我使用的緩衝液(接收不同iOS設備上之後)

void *buffer = malloc(255); 
[data getBytes:buffer length:sizeof(unsigned int)]; 
unsigned int _state = (unsigned int)buffer; 
.... 

解包,因爲最終會有很多不同整數/漂浮等存儲在NSData的。

- (BOOL)sendData:(NSData *)data toPlayers:(NSArray *)playerIDs withDataMode:(GKMatchSendDataMode)mode error:(NSError **)error 
-(void)match:(GKMatch *)match didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID 

但問題是,當我解壓:使用蘋果遊戲中心的API存儲花車的數量,等等。我發送和接收數據 - 第一個INT可確定消息的類型,第二個INT單個int,而不是66,我得到一些像401488960或399903824這樣的隨機值(每次我解包時它的不同,即使我每次都發送66次)。 爲什麼數據不正確?我是否錯誤地解包?

回答

2

您正在將指針buffer指向unsigned int:您正在將內存地址分配給_state,而不是該地址的值。使用適當類型的指針(unsigned int *)代替並取消引用:

unsigned int _state = *(unsigned int *)buffer; 
相關問題