我知道这似乎是一个愚蠢的问题,但我真的在这里遇到麻烦。
我正在一个项目中工作,我有一些我无法修改的功能。也就是说,我在我的Obj里面得到了一些C函数(不是我的专长)。我可以修改的C代码。
所以在这里......解释我的一点点。
我收到了像“\xce\x2d\x1e\x08\x08\xff\x7f
”这样的NSData。我必须将每个\ hex代码放在一个char数组中,如下所示:
cArray[1]=ce;
cArray[2]=2d;
cArray[3]=1e;
cArray[4]=08;
等等......当然不喜欢这个,但只是让你理解。我最初的举措是使用subdataWithRange分离NSData:并用所有“subdata”填充一个数组。所以下一步可能是将该数组的每个位置传递给一个char数组,这就是我被卡住的地方。
我正在使用类似的东西(现在没有我的代码)
for(int i=0 ; i<=64 ; i++) {
[[arrayOfSubData objectAtIndex:i] getBytes:&charArray[i]];
}
使用我的subData数组中的十六进制填充char数组。这几乎完美无缺。几乎。
以cArray为例,我的NSLog(@"pos%i: %x",i,charArray[i])
会告诉我:
pos1: ce
pos2: 2d
pos3: 1e
pos4: 8
所有“左零”都以同样的方式被压制。我目前的解决方法(我不确定这是否是最好的做法)是将subDataArray和initWithFormat:
一个字符串。有了这个,我可以用NSScanner scanHexInt:
将字符串转换为int,但是当我将十进制int转换为十六进制CHAR时,我又被卡住了。以这种方式填充我的char数组的最佳方法是什么?
任何帮助或一些“强硬的爱”将不胜感激。感谢
答案 0 :(得分:2)
根据printf formatting的正常规则(NSLog也遵循),您需要以下内容:
NSLog(@"pos%i: %02x", i, charArray[i]);
'0'表示左边的垫子为0并且是一个标志。 '2'表示确保该字段的输出至少为两个字符。这样就可以确保输出至少两个字符并用'0'填充左边以填充空格。