【发布时间】:2013-01-27 05:46:15
【问题描述】:
我在互联网上找到了以下代码,它将NSString 表示如@"00F04100002712" 转换为实际的字节数组。该代码有效并且确实生成了正确的输出;我只是不明白为什么会有char byte_chars[3] 而不是char byte_chars[2],因为代码中只使用了前两个位置。
void hexStringToBytes(NSString *s, NSMutableData *data)
{
unsigned char whole_byte;
char byte_chars[3] = {'\0','\0','\0'};
int commandLength = (int)[s length];
// convert hex values to bytes
for (int i=0; i < commandLength/2; i++)
{
byte_chars[0] = [s characterAtIndex:i*2];
byte_chars[1] = [s characterAtIndex:i*2+1];
whole_byte = strtol(byte_chars, NULL, 16);
[data appendBytes:&whole_byte length:1];
}
}
我认为这与strtol 函数调用有关,但我不确定是什么。
有人能解释一下它的工作原理和原因吗?
【问题讨论】:
-
我看不出这段代码如何将
@"00 F0 41 00 00 27 12"转换为字节序列00f04100002712...似乎假设输入没有分隔符。 -
在将它传递给这个函数之前,我会去掉所有的空格,就是这样。带空格的版本便于阅读和调试。
标签: objective-c c strtol