//
// 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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!