进制转换
#include <iostream>
#include <atlstr.h>
using namespace std;
//transform
const char tab[] = "0123456789ABCDEF";
string trans(string input,int bytes);
//达到的效果是实现数字进制的转化,具体是输入一个十进制数字,输出具有需要字节数的
//十六进制(若位数不够,则能自动补齐),结果如下
CString Strhex(CString DesStr,int bytes);
/*int main(int argc, char const *argv[])
{
CString output=trans("253",1);
cout<<output<<endl;
system("pause");
return 0;
}*/
string trans(string input,int bytes){
int input_temp=stoi(input);
cout<<input_temp<<endl;
int m=2*bytes;//位数
int max=1<<8*bytes;//能表示的最大数值
// cout<<max<<endl;
if (input_temp<0||input_temp>=max)return "error_data";//判断input是否符合要求
string output=string(m--,'0');
while(input_temp){
output[m--]=tab[input_temp%16];
input_temp/=16;
}
return output;
}
整理出的链接如下
cmd markdown源代码
进制转换(初稿)
标签: 进制
目的
实现进制之间的转换
具体要求
- 实现各种进制之间的转换
- 输出结果有字节数要求(即位数不够时,需要在高位补0)
- 判断输入是否超过要求字节数所能表示的范围
基础知识
按权相加法(m进制转换为十进制)
m进制数从低位到高位(即从右往左)计算,第0位的权值是m的0次方,第1位的权值是m的1次方,第2位的权值是m的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
公式如下:
\[result=a_0{m^0}+a_1{m^1}+a_2{m^2}+\dots+a_x{m^x}
\]
\(a_0,a_1,a_2,a_x\)分别表示m进制的第\(0,1,2,x\)位的数值
\(m_0,m_1,m_x\)分别表示m进制对应于第\(0,1,2,x\)位的权值
\(result\)表示转换结果(十进制)
除数取余法(十进制转换为m进制)
对于整数部分,用被除数反复除以m,除第一次外,每次除以m均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。
对于小数部分,采用连续乘以基数m,并依次取出的整数部分,直至结果的小数部分为0为止。故该法称“乘基取整法”。
接口(10->16)
string trans(string input,int bytes)
input代表输入的十进制数字
bytes代表需要输出的字节数要求
该函数返回的是要求字节数的十六进制
具体实现
string trans(string input,int bytes)
{
int input_temp=stoi(input);
int m=2*bytes;//位数
int max=1<<8*bytes;//能表示的最大数值
if (input_temp<0||input_temp>=max)return "error_data";//判断input是否符合要求
string output=string(m--,'0');
//主要用到除16取余法
while(input_temp){
output[m--]=tab[input_temp%16];
input_temp/=16;
}
return output;
}
参考文献
待办事项
总结
</tr>
| 尚待改进 | 意见 |
|---|---|
|
基础知识内容中 文字过多堆砌,影响阅读 语言不够简练明了 代码不够精炼 整体逻辑,效果不够理想 流程图效果不佳 |
常看专业文档-->加强整体排版,规范用词用图(最好是图文交叉进行.文少图多) 看hihocoder的提示-->学会用伪代码写 看逻辑方面的书籍-->了解和增强逻辑结构 用专业的图形编辑器-->暂时用ProcessOn |

浙公网安备 33010602011771号