免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9141 | 回复: 9
打印 上一主题 下一主题

[C] 新手求助 一个十进制转换十六进制的函数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-19 14:55 |只看该作者 |倒序浏览
大家好,我是Linux C的新手
现在向各位前辈请教一个十进制转换十六进制的函数

然后再请各位教我十进制转换成八进制, 二进制的函数。。

谢谢~!!!!

论坛徽章:
0
2 [报告]
发表于 2008-11-19 15:07 |只看该作者
十进制转任何进制只需要除以该数,然后所得余数就是转换后的数值了
比如:十进制 37
二进制 37 / 2 = 18,余数为1,然后 18 / 2 = 9,余数为0, 9 / 2 = 4,余数为1, 4 / 2 = 2,余数为0, 2 / 2 = 1,余数为0, 1 / 2 = 0, 余数为1,所以转换后的二进制为100101,为余数的反序
十六进制 37 /16 = 2,余数为5, 2 / 16 = 0,余数为2,所以转换后的十六进制为25
其他进制依次类推

不过这个不是C语言的范畴吧,更与linux无关

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2008-11-19 15:10 |只看该作者
原帖由 JCheung 于 2008-11-19 14:55 发表
大家好,我是Linux C的新手
现在向各位前辈请教一个十进制转换十六进制的函数

然后再请各位教我十进制转换成八进制, 二进制的函数。。

谢谢~!!!!


这些都可以去网上找现成的算法,LZ先google一把

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
4 [报告]
发表于 2008-11-19 21:02 |只看该作者

回复 #1 JCheung 的帖子

十进制转十六进制代码示例:
char buff[16];
char *pEnd;
int n;

strcpy(buff, "12345");
n = strtol(buff, &pEnd, 10);
sprintf(buff, "%X", n);

论坛徽章:
0
5 [报告]
发表于 2008-11-26 08:50 |只看该作者
谢谢楼上的。这个是我去面试的时候的一个题,不会,所以来这里请教下大家

论坛徽章:
0
6 [报告]
发表于 2008-11-26 21:49 |只看该作者
可以参考如下代码

下面这段代码可以将一个数据从x进制转化为y进制

#include <stdio.h>

int main(void)
{
        int val1 = 0, val2 = 0;
        int w1 = 1, w2 = 1;
        int decimal = 0;
        int temp = 0;
        int wtemp = 1;
        int wtemp10 = 1;

        printf("Please input a number to convert\n");
        scanf("%d", &val1);

        printf("value to convert from a to b\na = ?  b = ?\n");
        scanf("%d %d", &w1, &w2);

        temp = val1;
        do
        {
                decimal += (temp % 10) * wtemp;
                wtemp *= w1;
        } while (temp /= 10);         

        temp = decimal;
        wtemp = 1;
        do
        {
                val2 += (temp % w2) * wtemp;
                wtemp *= 10;
        } while (temp /= w2);


    printf("val1 = %d(%d)\t decimal = %d(10)\t val2 = %d(%d)\n", val1, w1, decimal, val2, w2);

        return;
}

论坛徽章:
0
7 [报告]
发表于 2009-01-02 10:22 |只看该作者
做8位机的时候经常要做一些工作!
看一下51,8位机的芯片的资料就可以了!不过大多是又汇编写的!

论坛徽章:
0
8 [报告]
发表于 2009-01-02 11:06 |只看该作者

  1. int dectohex(int dec,int len,char s[])
  2. {
  3.         static char buf[256];
  4.         char cell[] = "0123456789ABCDEF";
  5.         int i = 0;

  6.         memset(buf, 0, 256);
  7.         memset(buf, '0', len);

  8.         while (dec != 0)
  9.         {
  10.                 buf[i++] = cell[dec % 16];
  11.                 dec = dec / 16;
  12.         }

  13.         strcpy(s,strrev(buf));

  14.         return 0;
  15. }
复制代码

论坛徽章:
0
9 [报告]
发表于 2009-02-09 16:09 |只看该作者
原帖由 eveson 于 2009-1-2 11:06 AM 发表

int dectohex(int dec,int len,char s[])
{
        static char buf[256];
        char cell[] = "0123456789ABCDEF";
        int i = 0;

        memset(buf, 0, 256);
        memset(buf, '0', len);

        while (dec != 0)
        {
                 ...


谢谢您的帮助。。

论坛徽章:
0
10 [报告]
发表于 2009-02-09 16:10 |只看该作者
原帖由 shuiyu123 于 2009-1-2 10:22 AM 发表
做8位机的时候经常要做一些工作!
看一下51,8位机的芯片的资料就可以了!不过大多是又汇编写的!




谢谢你知道我的意思。哈哈。
你也是做嵌入式的吧?
我是新手。
呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP