簡體   English   中英

如何在uint64_t上存儲結構信息以應對Game Center挑戰

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM