ios CCRadix.m

//
//  CCRadix.h
//  CCFC
//
//


#ifndef CC_RADIX_H
#define CC_RADIX_H


typedef char SMALL_INT;


#ifdef __OBJC__


// it used for radix operation
@interface CCRadix : NSObject 
{


}


+ (NSString *)get2RadixStr:(unsigned)n;
+ (NSString *)get8RadixStr:(unsigned)n;
+ (NSString *)get10RadixStr:(unsigned)n;
+ (NSString *)get16RadixStr:(unsigned)n;


// you should make sure the radix argument is <=10 && > 1.
+ (NSString *)getRadixStr:(unsigned)n withRadix:(SMALL_INT)radix;


+ (unsigned)getValueFromStr:(NSString *)str withRadix:(SMALL_INT)radix;


// you should make sure the srcStr with srcRadix is valid and not overflow to UINT_MAX.
+ (NSString *)getRadixStr:(NSString *)srcStr 
                srcRadix:(SMALL_INT)srcRadix 
                  destRadix:(SMALL_INT)destRadix;




@end


#endif  // __OBJC__
#endif  // CC_RADIX_H

 

//
//  CCRadix.m
//  CCFC
//
//


#include "CCRadix.h"




@implementation CCRadix


+ (NSString *)get2RadixStr:(unsigned)n
{
        return [self getRadixStr:n withRadix:2];
}


+ (NSString *)get8RadixStr:(unsigned)n
{
    return [self getRadixStr:n withRadix:8];
}


+ (NSString *)get10RadixStr:(unsigned)n
{
    return [self getRadixStr:n withRadix:10];
}


+ (NSString *)get16RadixStr:(unsigned)n
{
    NSMutableString *ret = [NSMutableString string];
        while (n)
        {
                int temp = n % 16;
                if(temp >= 10)
                        temp = 'A' + temp - 10;
                
                if(temp < 10)
                        [ret insertString:[NSString stringWithFormat:@"%d", temp] 
                      atIndex:0];
                else
                        [ret insertString:[NSString stringWithFormat:@"%c", temp] 
                                          atIndex:0];
                
                n /= 16;
        }
        return ret;
}


// you should make sure the radix argument is less or equal to 10.
+ (NSString *)getRadixStr:(unsigned)n withRadix:(SMALL_INT)radix
{
    NSMutableString *ret = [NSMutableString string];
        while (n)
        {
                int temp = n % radix;
                [ret insertString:[NSString stringWithFormat:@"%d", temp] 
                                  atIndex:0];
                n /= radix;
        }
        return ret;
}


+ (unsigned)getValueFromStr:(NSString *)str withRadix:(SMALL_INT)radix
{
    int len = [str length];
    if(len == 0)
        return  0;
    
    unsigned sum = 0;
    for(int i = len - 1; i >= 0; --i)
    {
        sum += ([str characterAtIndex:i] - '0') * pow(radix, len - i - 1);
    }
    return sum;
}


// you should make sure the srcStr with srcRadix is valid and not overflow to UINT_MAX.
+ (NSString *)getRadixStr:(NSString *)srcStr 
                 srcRadix:(SMALL_INT)srcRadix 
                destRadix:(SMALL_INT)destRadix
{
    unsigned n = [self getValueFromStr:srcStr withRadix:srcRadix];
    return [self getRadixStr:n withRadix:destRadix];
}


@end


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值