无法将Dec转换为Hex(Int到Char)

时间:2011-02-23 23:58:40

标签: objective-c c char hex

我知道这似乎是一个愚蠢的问题,但我真的在这里遇到麻烦。

我正在一个项目中工作,我有一些我无法修改的功能。也就是说,我在我的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数组的最佳方法是什么?

任何帮助或一些“强硬的爱”将不胜感激。感谢

1 个答案:

答案 0 :(得分:2)

根据printf formatting的正常规则(NSLog也遵循),您需要以下内容:

NSLog(@"pos%i: %02x", i, charArray[i]);

'0'表示左边的垫子为0并且是一个标志。 '2'表示确保该字段的输出至少为两个字符。这样就可以确保输出至少两个字符并用'0'填充左边以填充空格。