网上看到一些十进制转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能用别的更好的方法替代,也能指出,多多交流,共同学习,谢谢