在Objective C中将二进制转换为十进制

4

我有一个二进制序列字符串,如何将其转换为十进制?Objective C 中是否有内置函数可以使用?


12
现在他们开始布置Objective-C的家庭作业了吗?;) - Simon Whitaker
3个回答

21
NSString * b = @"1101";
long v = strtol([b UTF8String], NULL, 2);
NSLog(@"%ld", v); //logs 13
这样做的不足之处在于它似乎只会产生正数。

如果你想要将最左边的位作为符号位(例如0001=1和1001=-1),那么你可以使用 [str hasPrefix:@"1"]。否则,你可以使用其他算法来检查字符串是否对应于负数。 - Arc676

-1

[这段代码显然不需要解释]

(void)convertBinaryToNumeric{
    NSString *bin_Input = @"1010";
    NSString *reverseInput = [self reverseString:bin_Input];
    int dec_Output = 0;
    int dec_Counter = 0;

    for (int i=0; i<[reverseInput length]; i++) {
        dec_Output = [[reverseInput substringWithRange:NSMakeRange(i, 1)] intValue] * [self multipliesByTwo:i];
        dec_Output = dec_Counter + dec_Output;
        dec_Counter = dec_Output;
    }
    NSLog(@"Bin:%@ Dec:%d",bin_Input,dec_Output);
}

(NSString *)reverseString:(NSString *)inputStr{
    NSMutableString *revStr = [[NSMutableString alloc]initWithString:@""];
    for (int i=[inputStr length]-1; i>=0; i--) {
        [revStr appendString:[inputStr substringWithRange:NSMakeRange(i, 1)]];
    }
    return revStr;
}

(int)multipliesByTwo:(int)number{
    if(number == 0){
        return 1;
    }else{
        int bin_value = 2;
        int multipleBy=0;
        for (int i=1; i<=number; i++) {
            if(multipleBy == 0){
                multipleBy = bin_value;
            }else{
                multipleBy = multipleBy *2;
            }
        }
        return multipleBy;
    }
    return 0;
}

这是我的独立思考,希望能对你有所帮助。 - Vignes Waran

-1

我找不到任何内置函数,因此根据我们对话的过程编写了简单的C函数。

(int) BinToInt(char *temp) {
int count, total, i, j, tmp;

total = 0;
count = strlen(temp);

for (i = 0; i <= count; i++) {
    if (temp[count-i] == '1') {
        tmp = 1;
        for (j = 1; j < i; j++)
            tmp *= 2;
        total += tmp;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接