我一直在研究计算器,我想实现从十进制到八进制以及从十进制到十六进制的转换。我是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
。这应该处理所有操作的显示,包括:加法,乘法等,但也包括八进制和十六进制。同样,它适用于八进制,但不适用于十六进制。
答案 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);