进制之间的转换

1.1 十进制转2进制

-(NSString *)binaryFromInteger:(NSInteger)index{
    NSString *str = @"";
    while (index != 1) {
        NSInteger two = index % 2;
        str = [NSString stringWithFormat:@"%ld%@",two,str];
        index /= 2;
    }
    return [NSString stringWithFormat:@"%ld%@",index,str];
}

1.2 十进制转8进制

//十进制转八进制
-(NSString *)octonaryFromInteger:(NSInteger)index{
    return [NSString stringWithFormat:@"%lo",index];
}

1.3 十进制转16进制

-(NSString *)hexFromInteger:(NSInteger)index{
    return [NSString stringWithFormat:@"%lx",index];
}

2.1 2进制转十进制

-(NSInteger)integerFromBinary:(NSString *)binary{
    
    NSInteger count = binary.length;
    NSInteger number = 0;
    for (NSInteger i = count; i > 0; i --) {
        NSInteger index = [[binary substringWithRange:NSMakeRange(i - 1, 1)] integerValue];
        number += index * powf(2, count - i);
    }
    
    return number;
}

2.2 8进制转十进制

-(NSInteger)integerFromOctonary:(NSString *)octonary{
    
    NSInteger count = octonary.length;
    NSInteger number = 0;
    for (NSInteger i = count; i > 0; i --) {
        NSInteger index = [[octonary substringWithRange:NSMakeRange(i - 1, 1)] integerValue];
        number += index * powf(8, count - i);
    }
    
    return number;
}

2.3 16进制转十进制

-(NSInteger)integerFromHex:(NSString *)hex{
    NSInteger count = hex.length;
    NSInteger number = 0;
    NSDictionary *dict = @{@"0":@"0",@"1":@"1",@"2":@"2",@"3":@"3",
                           @"4":@"4",@"5":@"5",@"6":@"6",@"7":@"7",
                           @"8":@"8",@"9":@"9",@"a":@"10",@"b":@"11",
                           @"c":@"12",@"d":@"13",@"e":@"14",@"f":@"15"};
    for (NSInteger i = count; i > 0; i --) {
        NSString *letter = [hex substringWithRange:NSMakeRange(i - 1, 1)];
        NSInteger index = [[dict objectForKey:[letter lowercaseString]] integerValue];
        number += index * powf(16, count - i);
    }
    return number;
}
原文地址:https://www.cnblogs.com/gulong/p/4993829.html