十进制转二进制 八进制 十六进制

网上看到一些十进制转16进制的代码都不怎么靠谱,还是自己写个得了,没有仔细测试,如果有问题请大大门口下留情,多多指导

#pragma mark 十进制转其他进制
/**
 *	@brief 十进制转其他进制
 *
 *	@param 	decimalNum 	十进制数
 *	@param 	system 	需要转成多少进制数	
 *	@param  andInitStr 调用是传个空字符串@“”就可以,此字段只是为了保留递归调用时能在上一次计算的结果上递增
 * @return 转化后的字符串 */
+ (NSString *)decimalToOther:(int)decimalNum andSystem:(int)system andInitStr:(NSString *)str
{
    NSString *result = str;
    
    int redundant;
    int divisor;
    
    redundant = decimalNum % system;
    divisor = decimalNum / system;
    
    NSString * (^numToStr)(int) = ^(int redundant){
        NSString *redundantValue;
        switch (redundant)
        {
            case 10:
                redundantValue =@"A";break;
            case 11:
                redundantValue =@"B";break;
            case 12:
                redundantValue =@"C";break;
            case 13:
                redundantValue =@"D";break;
            case 14:
                redundantValue =@"E";break;
            case 15:
                redundantValue =@"F";break;
            default:redundantValue = [[NSString alloc]initWithFormat:@"%i",redundant];
                
        }
        return redundantValue;
    };
    
    result = [numToStr(redundant) stringByAppendingString:result];
    if(divisor >= system){
        [self decimalToOther:divisor andSystem:system andResult:@""];
    }else{
        result = [numToStr(divisor) stringByAppendingString:result];
    }
    return result;
}

测试结果:
NSString *result = [selfdecimalToOther:64andSystem:2];
结果:2014-01-15 15:44:39.353 HexText[4749:a0b] result:1000000
NSString *result = [selfdecimalToOther:64andSystem:8];
结果:2014-01-15 15:45:29.778 HexText[4767:a0b] result:100

NSString *result = [selfdecimalToOther:64andSystem:16];
结果:2014-01-15 15:46:27.927 HexText[4787:a0b] result:40

备注:如有正确之处请多多指出,或者andInitStr能用别的更好的方法替代,也能指出,多多交流,共同学习,谢谢

    原文作者:进制转换
    原文地址: https://blog.csdn.net/daiyelang/article/details/18311911
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞