为啥以下代码从 NSData 返回不正确的值?
Posted
技术标签:
【中文标题】为啥以下代码从 NSData 返回不正确的值?【英文标题】:Why does the following code return incorrect values from NSData?为什么以下代码从 NSData 返回不正确的值? 【发布时间】:2013-11-22 02:05:01 【问题描述】:我需要以 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;
....
我正在使用缓冲区,因为最终会有许多不同的整数/浮点数等存储在 NSData 中。第一个 int 可以确定消息的类型,第二个 int - 存储的浮点数等...我使用苹果游戏中心 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)。 为什么数据不正确?我是不是解包不正确?
【问题讨论】:
【参考方案1】:您将指针buffer
转换为unsigned int
:您将内存地址分配给_state
,而不是该地址处的值。改为使用适当类型的指针 (unsigned int *
),并取消引用它:
unsigned int _state = *(unsigned int *)buffer;
【讨论】:
以上是关于为啥以下代码从 NSData 返回不正确的值?的主要内容,如果未能解决你的问题,请参考以下文章