long型十进制转换为十六进制 和 十六进制转换为十进制

本文深入解析了将长整型数字转换为二进制字符串和十六进制字符串的算法流程,包括核心步骤和代码实现,旨在帮助读者理解和掌握基本的数值转换技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数原型:

 

1
2
3
4
//转二进制
char *ConvertTo2String(long number);
//转十六进制
char *ConvertTo16String(long number);

  思路:

  转换二进制很简单,二步操作即可完成,

         1:循环对数字1左移31-i(i={0,31})位(从高位开始的),再与把number作位与操作,

       2:再把刚才的结果通过右移31-i  (i={0,31}) 位得出每一位是否为0还是1,

  这样就得到了每一位的二进制位,再把这些二进制位拼成字符串就OK了!

 

char *ConvertTo2String(long number)
{
     char *output = NULL;
     output = (char*)malloc(33);//include '\0'
      
     int i = 0;
     for(;i<32;i++)
     {
         output[i] = number & (1<<31-i);
         output[i] = output[i] >> 31-i;
         output[i] = (output[i] == 0) ? '0':'1';
     }

     output[i] = '\0';
     return output
}


转换十六进制麻烦一点,要考虑字母的情况,

char * ConvertTo16String(long number)
{
    char *output= NULL;
    char *temp = NULL;
 
    output= (char*)malloc(11);
 
    output[0] = '0';
    output[1] = 'x';
    output[10] = '\0';
    temp = output+ 2;
 
    for(int i = 0; i<8; i++)
    {
        temp[i] = (char)(number<< 4 * i >> 28);    //先左移4*i,再右移28,每一次处理4位
        temp[i] = temp[i]>=0 ? temp[i] : temp[i]+16;    //为转换为A~F的字母作准备
        temp[i] = temp[i] < 10 ? temp[i]+48 : temp[i]+55;   //转字母
    }
    
    return output;
}

十六进制转换为十进制

#include<stdio.h>
long fun(char*s);
#define N 50 
void main()
{
long m;
char s[N];
printf("输入十六进制数: ");
scanf("%s",s);
m=fun(s);

printf("%ld",m);
}

long  fun(char*s)
{
int i,t;
long sum=0;
for(i=0;s[i];i++)
{
if(s[i]<='9')t=s[i]-'0';
else  t=s[i]-'a'+10;
sum=sum*16+t;
}
return sum;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值