检索词:
进制转换、通用进制转换、二进制转十进制、二进制转八进制、二进制转十六进制、
十进制转二进制、十六进制转二进制、八进制转二进制、通用算法、字符型输入输出
英文 | 中文 | 缩写 | 标识符 |
---|---|---|---|
Binary | 二进制 | Bin/B | |
Octal | 八进制 | OCT/O | %o—(无符号8进制整数(不输出前缀0)) |
Decimal | 十进制 | DEC/D | %u—(无符号10进制整数) AND %d—(整数/有符号) |
hexadecimal | 十六进制 | HEX/H | %x/X—(无符号,x对应小写,X对应大写(不输出前缀0x)) |
system | 进制 | ||
conversion | 转换 | ||
malloc | 分配内存 |
函数输入 | 数据类型 | 含义 |
---|---|---|
in | char* | 源数据 |
s_in | int | 源数据的进制 |
s_out | int | 目标数据的进制 |
变量名称 | 参数类型 | 参数含 |
---|---|---|
n | int | 临时循环量 |
out | char* | 用于保存目标数据 |
dec | int | 转换时的中间值 |
outLength | int | ★目标数据的长度(自行尝试不同取值,影响输出结果) |
函数返回值类型 | 返回值含义 |
---|---|
char* | 转换后的结果 |
源代码
#include
#include
#include
char* SystemConversion(char *in,int s_in,int s_out)
{
char *out=(char*)malloc(sizeof(char));
int n,dec=0;
int outLength=512;
for(char *p=in;*p;p++)
dec=dec*s_in+(*p-((*p>='a')?('a'-10):'0'));
for(n=outLength-1;dec&&n;dec=dec/s_out)
out[n--]=(dec%s_out)+(((dec%s_out)<10)?'0':('a'-10));
memmove(out,out+n+1,outLength-n-1);
out[outLength-n-1]=0;
return out;
}
int main()
{
for(int i=2;i<=36;i++)
printf("转换为%d进制结果:%s\n",i,SystemConversion("1024",10,i));
return 0;
}
【运行结果】
**char itoa( int value, char string,int radix);
参数说明:
value:欲转换的数据。
string:目标字符串的地址。
radix:转换后的进制数,可以是10进制、16进制等,范围必须在 2-36。功能:
将整数value 转换成字符串存入string 指向的内存空间 ,radix 为转换时所用基数(保存到字符串中的数据的进制基数)。
返回值:
函数返回一个指向 str,无错误返回。
#include
#include
int main()
{
char a[100]={0};
for(int i=2;i<=36;i++)
{
itoa(1024,a,i);
printf("转换为%d进制结果:%s\n",i,a);
}
return 0;
}
源类型 | 目标类型 | 转换方法 |
---|---|---|
int | char | 0+‘0’ |
char* | string | string s; char* p =“hello”; s = p;直接赋值 |
char | int | ‘0’-‘0’ |
string | char* | char ch[20]; string s=“123456”; strcpy(ch,s.c_str()); |
含义不同
用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。而一般我们的编译器采用的都是ASCII字符集。因此’s’的含义其实和十进制数115的含义是一致的。而用双引号引起的字符串,代表的是一个指向无名数组起始字符的指针。
大小不同
用单引号引起的一个字符大小就是一个字节。而用双引号引起的字符串大小是字符的总大小+1,因为用双引号引起的字符串会在字符串末尾添加一个二进制为0的字符’\0’。
自定义函数
- 优点:
- 大部分转换算法都可满足
- 易于直接使用
- 可用于学习思考
- 缺点:
- 无输入异常反馈机制(即无法判断源数据是否满足源数据的进制),需要自己实现
- 因该算法为进制转换通用算法,相对某种具体转换为非最优解
库函数
调个库,一行解决不方便吗?
二者时间消耗几乎一致