gpt4 book ai didi

ios - 为什么以下代码从 NSData 返回不正确的值?

转载 作者:行者123 更新时间:2023-11-29 10:51:43 27 4
gpt4 key购买 nike

我需要将数据作为 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;
....

我正在使用缓冲区,因为最终会有许多不同的整数/ float 等存储在 NSData 中。第一个 int 可以确定消息的类型,第二个 int - 存储的 float 等......我使用苹果游戏中心 api 发送和接收数据:

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

但问题是,当我解包单个 int 时,我得到的不是 66,而是一些随机值,如 401488960 或 399903824(每次解包时它都不同,即使我每次发送 66)。 为什么数据不正确?我解包不正确吗?

最佳答案

您正在将指针 buffer 转换为 unsigned int:您正在将内存地址分配给 _state,而不是该地址处的值。改用适当类型的指针 (unsigned int *),并取消引用它:

unsigned int _state = *(unsigned int *)buffer;

关于ios - 为什么以下代码从 NSData 返回不正确的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135652/

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