[英]How to store struct information on a uint64_t for Game Center challenges
我正在嘗試在GKScore的uint64_t上下文屬性中存儲一些與游戲相關的信息 - 通過新的Game Center挑戰創建更好的游戲體驗。 但是,我沒有做對。 我構建了一個如下所示的結構:
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)];
將結構打包到NSData,然后將字節寫入myContext。
然后,我嘗試使用64位整數重新創建信息,如下所示:
NSData *newData = [NSData dataWithBytes:&myContext length:sizeof(myContext)];
GameInfo *result = (GameInfo*) [newData bytes];
但是,當我注銷這些值時,我發現我只能捕獲前兩個值(gameMode並銷毀)。 如果我向結構中添加更多變量,我仍然只捕獲前兩個變量。
我究竟做錯了什么? 有更聰明的方法嗎?
您正在嘗試將96位數據(iOS / ARM上的3個unsigned int
打包到64位容器中。 所以你看到前兩個32位值,而不是第三個。
也許您可以嘗試使用short
s或char
,具體取決於struct將保留的值的范圍,並嘗試將stuct的大小降低到<64位。 我認為ARM上的3個char
將被對齊到48位(如果是這樣可能是錯的,請告訴我!)。 所以也許可以使用short
。
編輯:更改結構的可能方法示例,假設您只在每個字段中存儲16位值:
typedef struct{
uint16_t gameMode;
uint16_t destroyed;
uint16_t duration;
} GameInfo;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.