2012-09-29 47 views
0

我正試圖在uk64_t的GKScore上下文屬性中存儲一些遊戲相關信息 - 用新遊戲中心挑戰創建更好的遊戲體驗。但是,我沒有把它做好。我建了一個結構如下圖所示:如何在uint64_t上存儲遊戲中心挑戰的結構信息

typedef struct{ 
    unsigned int gameMode; 
    unsigned int destroyed; 
    unsigned int duration; 
} GameInfo; 

我嘗試以下方法:

uint64_t myContext 

GameInfo info; 
info.gameMode = 2; 
info.destroyed = 50; 
info.duration = 100; 

NSData *data = [NSData dataWithBytes:&info length:sizeof(info)]; 
[data getBytes:&myContext length:sizeof(myContext)]; 

的struct收拾到的NSData然後寫入字節myContext。

然後,我嘗試使用64位整數如下重新創建信息:但是

NSData *newData = [NSData dataWithBytes:&myContext length:sizeof(myContext)]; 

GameInfo *result = (GameInfo*) [newData bytes]; 

,當我退出的價值觀,我看到,我只能夠捕捉到的前兩個值( gameMode並銷燬)。如果我在結構中添加更多變量,我仍然只捕獲前兩個變量。

我在做什麼錯?有沒有更聰明的方法來做到這一點?

回答

2

您試圖將96位數據(iOS/ARM上的3 unsigned int)打包到64位容器中。所以你看到前兩個32位值而不是第三個。

也許你可以嘗試使用short s或char s,這取決於你的結構將保存的值的範圍,並試圖將stuct的大小降低到< 64位。我認爲在ARM上的3 char將排列到48位(如果有的話,可能是錯誤的,請讓我知道!)。無論如何也許可以使用short

編輯:例如可能的方式來改變你的結構,假設你只存儲在各個領域的16位值:

typedef struct{ 
    uint16_t gameMode; 
    uint16_t destroyed; 
    uint16_t duration; 
} GameInfo; 
+0

啊我傻,非常感謝你的澄清。 –