我最近继承了一些Objective-C代码,真的很困惑它到底在做什么?
1)我不明白为什么char byte_chars[3]首先被“0”填充,然后在最后被“0”填充?
2)我不明白为什么他们用unsigned char来表示全白细胞,但却用了很长的时间?
3)我有点搞不清strtol方法在这里做什么,它需要3字节的字符字节(十六进制),然后将它们转换成一个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”(字母0)表示strtol()的八进制值(而不是十六进制,即“x”)。但正如CRD正确提到的(参见注释),这里它被传递给strtol()的第三个参数覆盖。所以到目前为止,有一个两个字母的字符串,第一个字符是0,第二个字符是标志的十六进制表示。
原因可能是,标志包含一个从“0”到“f”的数字(0到15)。
到2:
由于转换产生的值在[0…15]范围内,long值将具有其中一个值。你可以将它存储在一个字节中,而不需要很长的时间。但是,strtol()总是返回long。
到3:
是的,它是从包含数字的字符串到数字的转换。即字符串“06”将转换为数字6。

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

10-12 16:36