进制转化编译
⑴ 利用类模板编译将十进制转化二进制
十进制转二进制可以使用库函数itoa。
itoa函数原型:char*itoa(int value,char*string,int radix);
功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。
nt value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。
参考代码:
#include <stdio.h>
#include<stdlib.h>
int main()
{
int i=10;
char a[100];
itoa(i,a,2);
printf("%s\n",a);
return 0;
}
/*
1010
*/
⑵ 求c语言编译下,十进制转换为二进制,八进制,十六进制的程序
#include <iostream>
using namespace std;
int main()
{
int n,x,i=1,num=0;
cin>>n; //输入十进制数n
while(n!=0)
{
x=n % 2;
num=num+x*i;
i=i*10;
n=n/2;
}
cout<<num<<endl; // 输出二进制数
return 0;
}
这是C++程序,和C语言差不多
而转换为八进制,十六进制,就直接把2改为8或16就可以了
⑶ 在c++中如何编译一个程序进行进制转换
写一个进制转换的程序代码,然后编译运行。
⑷ 用C语言编写二进制转换十进制的程序。
1、为了完成进制的转换,在主函数中声明了个函数Sum,主要用于将二进制的每一位转换为十进制后的数相加,返回值就是相加后的和。另外定义了一个数组array[8],用于存放输入的八位二进制数。
⑸ C语言编译中的进制转换问题
#include <stdio.h>
#include <string.h>
void ttor(int n, int r)
{
if (n)
{
ttor(n / r, r);
printf("%c", n % r > 9 ? n % r - 10 + 'A' : n % r + '0');
}
}
int main(void)
{
int n;
int r;
while (scanf("%d%d", &n, &r) != EOF)
{
if (n > 0)
ttor(n, r);
else if (!n)
putchar('0');
else
{
putchar('-');
ttor(-n, r);
}
putchar('\n');
}
return 0;
}
⑹ c语言编程 把十进制转换为十六进制
方法一:
#include<iostream>
#include <string>
using namespace std;
string DecIntToHexStr(long long num)
{ string str; long long Temp = num / 16; int left = num % 16; if (Temp > 0) str +=
DecIntToHexStr(Temp); if (left < 10) str += (left + '0'); else str += ('A' + left - 10); return str;}
string DecStrToHexStr(string str){ long long Dec = 0; for (int i = 0; i < str.size(); ++i) Dec =
Dec * 10 + str[i] - '0'; return DecIntToHexStr(Dec);}int main()
{ string DecStr; while (cin >> DecStr) { cout << "0x" + DecStrToHexStr(DecStr); } return 0;}
方法二:
#include<iostream>
#include <string>
#include<vector>
#include <sstream>
#include <math.h>
using namespace std;int main()
{ string decStr; cin >> decStr; int num = stoi(decStr); vector<int>v; while (num) { int bit = num % 2; v.push_back(bit); num = num / 2; }
reverse(v.begin(), v.end()); string hexStr; if (v.size() % 4 == 0) { for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for (int j = i * 4; j < (i +
1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; } if (temp <= 9) hexStr += temp; else hexStr += ('A' + temp - 10); } }
else { int zeroNum = 4 - v.size() % 4; for (int i = 0; i < zeroNum; ++i) v.insert(v.begin(), 0); for (int i = 0; i < v.size() / 4; ++i) { int temp = 0, k = 3; for
(int j = i * 4; j < (i + 1) * 4; ++j) { if (v[j] == 1) temp += pow(2, k); --k; }
if (temp <= 9) { stringstream ss; string strTemp;
ss << temp; ss >> strTemp; hexStr += strTemp; } else hexStr += ('A' + temp - 10); } } cout << hexStr << endl; return 0;}
(6)进制转化编译扩展阅读:
还有3种方式可以实现,其中两种是使用系统函数,另一种是直接自己编写。
下面的代码就是3种方式的实现,包括2位的整数和任意整数(2的31次方以内)都可以。可自己选择需要的实现方式。
利用系统函数有
1. char * itoa ( int value, char * str, int base );value是要转化的数字,str是转化后的字符串存储的位置,base是进制数(但是这个函数不是标准C函数,有些编译器是不支持的!)。所以代码可以为:
char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度 char * inttohex(int aa){ itoa (aa, buffer, 16); return (buffer);}
2. sprintf(str,"%x",value);str是转化存储的位置,%x表示十六进制格式,value是要转化的数字。所以代码可以为:
char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度 char * inttohex(int aa){ sprintf(buffer, "%x", aa); return (buffer);}
3. 自己编写
如果参数只要两位数的整数,那么很简单。
代码如下:
#include <stdio.h>#include <stdlib.h> char buffer [33]; //用于存放转换好的十六进制字符串,可根据需要定义长度 char * inttohex(int aa)
{ sprintf(buffer, "%x", aa); return (buffer);} int main ()
{ int num; char * hex_str; printf ("Enter a number: "); scanf ("%d",&num); hex_str = inttohex (num); printf ("Hexadecimal number: %sH ", hex_str); return 0;}
⑺ 编译原理二进制转化成十进制文法
二转10如1101 1111 的算法为
(1)*2^7+(1)*2^6+(0)*2^5+(1)*2^4 +(1)*2^3 +(1)*2^2 +(1)*2^1+(1)*2^0
可以写一个循环进行公式相加,得到转换后的10进制
如果你的意思是反汇编二进制文件为汇编语言的话.网络搜索:bin文件反汇编,有详细教程
10转2的话写一个循环把数除2并存储余(%)2的数据到数组中,
orC语言的math.h或Cpp的math有itoa函数可以进行10转2
⑻ 使用C++编译不同进制间的相互转换,必须使用数组
//我给出功能函数,主函数你自己写吧
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
/*将一个整型数字转化成字符型数字,例如 8->'8',12->'c'*/
char numToChar(char num)
{
/*num是0到9之间的数字*/
if(num<=9&&num>=0)
{
num+=48;
}
/*num是10到15之间的数字*/
else
{
switch(num)
{
case 10:num='A';
case 11:num='B';
case 12:num='C';
case 13:num='D';
case 14:num='E';
case 15:num='F';
}
}
return num;
}
/*将一个字符型数字转化成整型数字,例如 '8'->8,'c'->12*/
int charToNum(char &num)
{
/*num是0到9之间的字符型数字*/
if(num<='9'&&num>='0')
{
num-=48;
}
/*num是'A'到'F'之间的字符型数字*/
else
{
switch(num)
{
case 'A':
case 'a':
num=10;
case 'B':
case 'b':
num=11;
case 'C':
case 'c':
num=12;
case 'D':
case 'd':
num=13;
case 'E':
case 'e':
num=14;
case 'F':
case 'f':
num=15;
}
}
return num;
}
/*将任意进制整数转化为十进制整数,返回转化后的十进制整数,num为任意进制整数,binary为该整数的进制*/
int anyBinaryToDecimal(string num,int binary)
{
int len=num.size();
int decimal_num=0;
for(int i=0;i<len;i++)
{
decimal_num+=charToNum(num[i])*pow(binary,len-i-1);
}
return decimal_num;
}
/*将十进制转化为任意进制,decimal为十进制整数,binary为需要转化的进制*/
void decimalToAnyBinary(int decimal,int binary)
{
string result;//保存x进制数
char temp;
while(decimal>0)
{
temp=decimal%binary;
result+=numToChar(temp);
decimal=decimal/binary;
}
/*输出转化后的x进制整数*/
for(int i=result.size()-1;i>=0;i--)
cout<<result[i];
cout<<endl;
}
⑼ C语言 将十进制数转化为二进制数 程序代码
#include <stdio.h>
void main()
{
int a;
scanf(\"%d\",&a);//输入一个10进制数。
int result=0;//存储a的二进制结果。
int p=1;//p=1表示个位数
do
{
int b=a%2;//b是余数,第一个余数是二进制的个位。
result=result+p*b;
p=p*10;//*10表示下个是10位数。
a=a/2;
}while(a);
printf(\"\\n%d\\n\",result);
}
程序在vc6.0下编译通过可以直接用,你自己看看吧,思路是a%2的结果是二进制的个位数,(a/2)%2的结果是二进制的十位数所以p扩大10倍,以后依次类推。
⑽ 16进制转10进制编程
/* 十六进制数转换为十进制数 *
/long hexToDec(char *source){long sum = 0;
long t = 1;int i, len;
len = strlen(source);for(i=len-1; i>=0; i--){sum += t * getIndexOfSigns(*(source + i));
t *= 16;}return sum;}
/* 返回ch字符在sign数组中的序号 *
/int getIndexOfSigns(char ch)
{if(ch >= '0' && ch <= '9'){return ch - '0';}
if(ch >= 'A' && ch <='F')
{return ch - 'A' + 10;}if(ch >= 'a' && ch <= 'f')
{return ch - 'a' + 10;}return -1;}
(10)进制转化编译扩展阅读:
计算机对除机器语言以外的源程序不能直接识别、理解和执行,都必须通过某种方式转换为计算机能够直接执行的。
编译方式下,首先通过一个对应于所用程序设计语言的编译程序对源程序进行处理,经过对源程序的词法分析、语法分析、语意分析、代码生成和代码优化等阶段将所处理的源程序转换为用二进制代码表示的目标程序。
然后通过连接程序处理将程序中所用的函数调用、系统功能调用等嵌入到目标程序中,构成一个可以连续执行的二进制执行文件。调用这个执行文件就可以实现程序员在对应源程序文件中所指定的相应功能。