如何使用Objective C将十进制转换为十六进制?

时间:2015-02-26 05:00:38

标签: objective-c xcode base-conversion

我一直在研究计算器,我想实现从十进制到八进制以及从十进制到十六进制的转换。我是Xcode和Objective C的新手,但我已经设法从十进制转换为八进制,它似乎不适用于十六进制。

这是我编写的将double转换为八进制的代码:

double result = 0;
...
double decToOct = [self popOperand];
NSString *oct = [NSString stringWithFormat:@"%llo", (long long)decToOct];
result = [oct doubleValue];

使用相同的方案(显然包括使用@"%llo"更改@"%llx"),转换为十六进制可以达到某个点。它确实编号为0到9,但是一旦达到10,它就会变为0.要测试,我还输入5395并显示1513,即所需的结果。

因此,我只能假设由于某种原因我的代码不想输入十六进制值的实际字母(例如11将转换为B但显示为0)。

有什么建议吗?提前谢谢。

更新 另外,我也一直用它来显示result

double result = [self.brain performOperation:operation];
self.display.text = [NSString stringWithFormat:@"%g", result];
从顶部列出的

result是一个最终在此处返回的参数self.brain performOperation:operation。这应该处理所有操作的显示,包括:加法,乘法等,但也包括八进制和十六进制。同样,它适用于八进制,但不适用于十六进制。

2 个答案:

答案 0 :(得分:3)

试试这个,可能会对你有所帮助。如果我错了,请告诉我:--->

NSString *decStr = @"11";
NSString *hexStr = [NSString stringWithFormat:@"%lX",
                 (unsigned long)[dec integerValue]];
NSLog(@"%@", hexStr);

答案 1 :(得分:0)

如果您知道您的字符串只包含有效的十进制数字,那么最简单的方法是:

NSString *dec = @"254";
NSString *hex = [NSString stringWithFormat:@"0x%lX", 
              (unsigned long)[dec integerValue]];
NSLog(@"%@", hex);