gpt4 book ai didi

objective-c - 如何为 Game Center 挑战在 uint64_t 上存储结构信息

转载 作者:行者123 更新时间:2023-11-28 22:48:08 28 4
gpt4 key购买 nike

我正在尝试将一些游戏相关信息存储在 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 和 destroyed)。如果我向结构添加更多变量,我仍然只捕获前 2 个变量。

我做错了什么?有没有更聪明的方法来做到这一点?

最佳答案

您正在尝试将 96 位数据(在 iOS/ARM 上为 3 个 unsigned int)打包到 64 位容器中。所以您看到的是前两个 32 位值,而不是第三个。

也许您可以尝试使用 shortchar,具体取决于您的结构将包含的值的范围,并尝试将结构的大小降至 < 64位。我认为 ARM 上的 3 个 char 将对齐到 48 位(如果是的话,这可能是错误的,请告诉我!)。所以无论如何都可以使用 short

编辑:更改结构的可能方法示例,假设您只在每个字段中存储 16 位值:

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

关于objective-c - 如何为 Game Center 挑战在 uint64_t 上存储结构信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12654824/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com