gpt4 book ai didi

ios - 如何在 32 位和 64 位处理器 iOS 之间发送 int

转载 作者:行者123 更新时间:2023-11-29 01:33:22 25 4
gpt4 key购买 nike

差不多就是标题,我使用 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

最佳答案

NSInteger 在 64 位平台上是 64 位的,在 32 位平台上是 32 位的。如果您不关心 64 位精度,您始终可以使用 int32_t(如果您想要无符号,则可以使用 u_int32_t)类型来显式地只使用 32 位精度值(value)。在设备之间发送值时明确数据长度通常是明智的,这就是这些类型存在的目的(有 int8_tint16_tint32_tint64_t 及其未签名的副本)。

还值得一提的是,在向任意硬件发送值时,您需要注意值的字节顺序(假设值大于 int8_tu_int8_t)。不过,如果您只使用 iOS 设备,这不会成为问题。

关于ios - 如何在 32 位和 64 位处理器 iOS 之间发送 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33221180/

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