//2、编写一个函数,将一个整数值转换为16进制表示的字符串。
// (如将整数64,转换为字符串"40")
//Liwei_2
//11/5/2005 Sat.
#include "stdio.h"
void ChangeToHex1(char *str1,int dec_num1);//声明函数(按位实现)
void ChangeToHex2(char *str2,int dec_num2); //声明函数(按进制实现)
int main()
{
long int dec_num;//定为32位
char str[100];
printf("Enter interger to change hex:/n");
scanf("%d",&dec_num);
ChangeToHex1(str,dec_num);
ChangeToHex2(str,dec_num);
return 0;
}
void ChangeToHex1(char *str1,int dec_num1)//整数值转换为16进制字符串的函数定义(按位运算来实现)
{
char four_bit[8];
int i=0,j=32; //j是位数计数器
unsigned int hex=0xF0000000;
for(i=0;i<8;i++)
{
four_bit[i]=(dec_num1&hex)>>(j-=4); //从高位开始每次提取一位16进制字符
hex=hex>>4; //每次右移4位
}
for(i=0;i<8;i++)
{
if(four_bit[i]<=9)
str1[i]=four_bit[i]+'0'; //转化为16进制字符的
else
str1[i]=four_bit[i]-10+'A'; //A--F
}
str1[i]='/0';
printf("Hex new String:/n%s", str1);
}
void ChangeToHex2(char *str2,int dec_num2) //整数值转换为16进制字符串的函数定义(按进制转换来实现)
{
int i=0,j=0,temp;
while(dec_num2)
{
temp=dec_num2%16;
if(temp<=9)
str2[i]=temp+48; //转化为16进制字符的0--9,'0'的ASCII为48
else
str2[i]=temp-10+65; //A--F
dec_num2/=16;
i++; //累计转换后的字符个数
}//while
printf("/nHex new String:/n");
for(j=i-1;j>=0;j--) //输出
printf("%c",str2[j]);
printf("/n");
}