gpt4 book ai didi

ios - iPhone上使用ntohl和htonl问题

转载 作者:行者123 更新时间:2023-11-29 02:55:24 25 4
gpt4 key购买 nike

我创建了一个 NSDATA 对象,然后通过网络发送。我无法从接收到的 NSDATA 流中获取正确的值。

这里有一些快速代码可以重现我的问题。无需网络传输。

    NSMutableData *data = [[NSMutableData alloc] initWithCapacity:150];

// put data in the array
[data woaAppendInt8:4];
[data woaAppendInt32:2525];
[data woaAppendInt8:6];
[data woaAppendInt32:1616];

// get data out of array
size_t offset = 0;

int x1 = [data woaInt8AtOffset:offset];
offset += 1; // move to next spot
NSLog(@"Should be 4 = %i",x1);

int x2 = [data woaInt32AtOffset:offset];
offset = offset + 4; // Int's are 4 bytes
NSLog(@"Should be 2525 = %i",x2);

int x3 = [data woaInt8AtOffset:offset];
offset += 1; // move to next spot
NSLog(@"Should be 6 = %i",x3);

int x4 = [data woaInt32AtOffset:offset];
offset = offset + 4; // Int's are 4 bytes
NSLog(@"Should be 1616 = %i",x4);

我正在使用 NSDATA 类别来简化该过程。这是类别代码:

    @implementation NSData (woaAdditions)

- (int)woaInt32AtOffset:(size_t)offset
{
const int *intBytes = (const int *)[self bytes];
return ntohl(intBytes[offset / 4]);
}

- (char)woaInt8AtOffset:(size_t)offset
{
const char *charBytes = (const char *)[self bytes];
return charBytes[offset];
}

@end

@implementation NSMutableData (waoAdditions)

- (void)woaAppendInt32:(int)value
{
value = htonl(value);
[self appendBytes:&value length:4];
}

- (void)woaAppendInt8:(char)value
{
[self appendBytes:&value length:1];
}

@end

woaInt8AtOffset 工作得很好并显示 4 和 6。woaInt32AtOffset 显示一些巨大的数字。

代码有什么问题?

最佳答案

我已更新代码以使用 int32_t 并修改类别如下:

- (int)woaInt32AtOffset:(size_t)offset
{
int32_t buf;
[self getBytes:&buf range:NSMakeRange(offset, 4)];
return ntohl(buf);
}

代码现在可以正常工作了。太棒了,谢谢。

关于ios - iPhone上使用ntohl和htonl问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23958827/

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