几乎是标题,我使用Gamekit在结构中发送一个int,在接收端使用其他设备获取它。 在64位cpus(iPhone 5S及以上)之间,这个数字很好。但是当一个iPhone 5获得它(32位cpu)时,int被收到为0.什么是正确的方式?
我尝试过发送NSInteger,结果是一样的。
我必须添加u_int_32t这个问题: 当设备连接时,每个设备交换随机数。这些数字决定了哪个玩家开始,而我正在使用u_int_32t,但是,32位cpus仍然会收到0.例如:
我宣布
uint32_t _ourRandomNumber;
然后,_ourRandomNumber = arc4random();
然后在这样的结构中发送数字。
typedef struct {
Message message;
uint32_t randomNumber;
} MessageRandomNumber;
使用这样的方法:
- (void)sendRandomNumber{
MessageRandomNumber message;
message.message.messageType = kMessageTypeRandomNumber;
message.randomNumber = _ourRandomNumber;
NSData *data = [NSData dataWithBytes:&message length:sizeof(MessageRandomNumber)];
[self sendData:data];
}
当32位cpu接收到它然后在接收方法中:
Message *message = (Message*)[data bytes];
if (message->messageType == kMessageTypeRandomNumber) {
MessageRandomNumber *messageRandomNumber = (MessageRandomNumber*)[data bytes];
NSLog(@"Received random number:%d", messageRandomNumber->randomNumber);
NSLog显示:收到的随机数:0
答案 0 :(得分:1)
NSInteger
将在64位平台上为64位,在32位平台上为32位。如果您不关心64位精度,则可以始终使用int32_t
(或u_int32_t
如果您希望无符号)类型明确使用32位值。通常明智的做法是在设备之间发送值时明确数据长度,这就是这些类型的存在(有int8_t
,int16_t
,int32_t
和int64_t
以及他们的未签名同行。)
还值得一提的是,在向任意硬件发送值时,您需要关注值的字节顺序(假设值大于int8_t
和u_int8_t
)。但是,如果您只使用iOS设备,则不会出现问题。