gpt4 book ai didi

c - Objective-c:为什么在我继承的这段代码中使用了 strtol 方法?

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:04 24 4
gpt4 key购买 nike

我最近继承了一些 Objective-C 代码,我真的很困惑它到底在做什么?

1) 我不明白为什么 char byte_chars[3] 首先填充一个“0”,然后最后填充一个 0?

2) 我不明白为什么他们对 wholeByte 使用 unsigned char,但要放入 long?

3) 我对 strtol 方法在这里的作用有些困惑,它需要 3 个 byte_chars 字节(十六进制),然后将它们转换为 long?

- (NSString *)starFromFlags:(NSString *)flags {
unsigned char wholeByte;
char byte_chars[3];
NSString *star = @"NO";

byte_chars[0] = '0';
byte_chars[1] = [flags characterAtIndex:1];
byte_chars[2] = 0;
wholeByte = strtol(byte_chars, NULL, 16);

if (wholeByte & 0x01) star = @"YES";

return star;
}

最佳答案

致 1:

末尾的0是末尾的'\0'(均为零值),意思是“字符串到此结束”。您必须将它放在末尾以结束字符串。

开始处的“0”(字母 0)表示 strtol() 的八进制值(不是十六进制,而是“0x”)。但正如 CRD 正确提到的那样(请参阅评论),它在这里被传递给 strtol() 的第三个 arg 覆盖。所以到这里为止,您有一个双字母字符串,第一个字符为 0,第二个字符为标志的十六进制表示。

这可能是因为标志包含从“0”到“f”₁₆/“F”₁₆(0 到 15₁₀)的数字。

致 2:

由于转换产生的值在 [0…15] 范围内,long 值将具有此值之一。您可以将它存储在一个字节中,不需要整整一个字节。但是,strtol() 总是返回一个 long。

致 3:

是的,它是将包含数字的字符串转换为数字。 IE。 字符串“06”将被转换为数字 6。

关于c - Objective-c:为什么在我继承的这段代码中使用了 strtol 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53182074/

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