0

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

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

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。这应该处理所有操作的显示,包括:加法、乘法等,还有八进制和十六进制。同样,它适用于八进制,但不适用于十六进制。

4

2 回答 2

3

试试这个,也许它会帮助你。如果我在这里错了,请告诉我:--->

NSString *decStr = @"11";
NSString *hexStr = [NSString stringWithFormat:@"%lX",
                 (unsigned long)[dec integerValue]];
NSLog(@"%@", hexStr);
于 2015-02-26T08:57:42.340 回答
0

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

NSString *dec = @"254";
NSString *hex = [NSString stringWithFormat:@"0x%lX", 
              (unsigned long)[dec integerValue]];
NSLog(@"%@", hex);
于 2015-02-26T08:56:37.863 回答