我正在尝试创建二进制到十进制计算器,我无法进行任何实际工作的转换。首先,我喜欢将自己介绍为目标c和编程的完整新手。因此,许多概念对我来说似乎很难,所以我主要是寻找最容易理解的方法而不是最有效的方法。
我现在有一个计算器,它将接受输入并在标签中显示。这部分工作正常,我没有问题。输入存储的变量是_display = [[NSMutableString stringWithCapacity:20] retain];
这是完美的工作,我可以相应地修改数据。我想要做的是能够在另一个标签中显示转换的NSString。目前我尝试了一些解决方案并且没有取得任何不错的结果,这是最新的尝试
- (NSMutableString *)displayValue2:(long long)element
{
_str= [[NSMutableString alloc] initWithString:@""];
if(element > 0){
for(NSInteger numberCopy = element; numberCopy > 0; numberCopy >>= 1)
{
[_str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
}
}
else if(element == 0)
{
[_str insertString:@"0" atIndex:0];
}
else
{
element = element * (-1);
_str = [self displayValue2:element];
[_str insertString:@"0" atIndex:0];
NSLog(@"Prima for: %@",_str);
for(int i=0; i<[_str length];i++)
_str = _display;
NSLog(@"Dopo for: %@",_str);
}
return _str;
}
在我的视图控制器中,我有一个转换按钮设置,按下此按钮时我想将第二个显示字段设置为十进制等效值。这就像我设置displayValue2以返回我选择的字符串一样有效。我所需要的只是帮助让这种转换发挥作用。目前这段代码导致我的班级显示“不完整的实现”。请帮助,并为那些抽出时间帮助的人欢呼。
答案 0 :(得分:1)
所以基本上你真正想要的是将二进制数转换成十进制数的方法,对吗?另一种思考此问题的方法是将数字基数从基数2
更改为基数10
。我之前在项目中使用过这样的函数:
+ (NSNumber *)convertBinaryStringToDecimalNumber:(NSString *)binaryString {
NSUInteger totalValue = 0;
for (int i = 0; i < binaryString.length; i++) {
totalValue += (int)([binaryString characterAtIndex:(binaryString.length - 1 - i)] - 48) * pow(2, i);
}
return @(totalValue);
}
显然,这是以字符串表示形式访问二进制文件。这很有效,因为您可以轻松访问更难的数字上的每个值。您还可以轻松地将返回类型从NSNumber更改为某个字符串文字。这也适用于您的element == 0
方案。
// original number wrapped as a string
NSString *stringValue = [NSString stringWithFormat:@"%d", 11001];
// convert the value and get an NSNumber back
NSNumber *result = [self.class convertBinaryStringToDecinalNumber:stringValue];
// prints 25
NSLog(@"%@", result);
如果我误解了某些内容请澄清,如果您不理解该代码,请告诉我。此外,这可能不是最有效的,但它简单而干净。
我也非常同意Hot Licks的评论。如果你真的对学习很感兴趣并希望成为一名发达的程序员,那么你应该先学习一些基础知识(我用Java学习并且很高兴我这样做了。)