0

我试图创建一个二进制到十进制计算器,但我无法进行任何实际有效的转换。首先,我想介绍一下我自己是一个完全了解目标 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 设置为返回我选择的字符串一样工作。我所需要的只是帮助使这种转换起作用。目前,这段代码导致在我的课堂上显示“不完整的实现”。请提供帮助,并为那些抽出时间提供帮助的人欢呼。

4

1 回答 1

1

所以基本上你真正在寻找的只是一种将二进制数转换为十进制数的方法,对吗?考虑这个问题的另一种方法是将数字的基数从 base 更改2为 base 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 学习的,很高兴我做到了)。

于 2013-10-24T16:39:42.627 回答