找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1338|回复: 16
收起左侧

如何十进制转十六进制?

  [复制链接]
ID:76044 发表于 2024-4-7 16:07 | 显示全部楼层 |阅读模式
我制作了几个时钟,DS1203,PGS,都分别制作成功了,现在想结合一下,想制作DS1203走时,GPS校准的时钟,发现得到时间是,DS1203是十六进制的,GPS是十进制,折腾了几天都没有做好,思想枯竭,哪个高手给个思路,说明一下,本人C语言只能看个大概,会点汇编,拜托!拜托!高手,先在这里谢谢了!
回复

使用道具 举报

ID:883242 发表于 2024-4-7 18:07 | 显示全部楼层
假设字符串gps[]从第5个字节开始是hhmmss

hour=(gps[5]-'0')*10+gps[6]-'0';
minute=(gps[7]-'0')*10+gps[8]-'0';
second=(gps[9]-'0')*10+gps[10]-'0';
回复

使用道具 举报

ID:1080935 发表于 2024-4-7 18:15 | 显示全部楼层
是DS1302吧,查下十进制转BCD子程序可以直接用。其实就是把GPS的十进制对10取余数作为个位(低四位),然后原数除10再对10取余作为十位(高四位,原数据不大于99的话不取余也可,就是原数除10,商做高四位,余数做低四位),时钟8位够用了。
回复

使用道具 举报

ID:69038 发表于 2024-4-7 18:52 | 显示全部楼层
24转0x24(数字转换):
(24/10)*16+24%10  ; //===>0x14
24转16进制(数值变换):
24/16+24%16   ;        //===>0x18
回复

使用道具 举报

ID:213173 发表于 2024-4-7 19:02 | 显示全部楼层
//BCD码转十进制函数
unsigned char BCD_D(unsigned char bcd)
{
        return ((bcd>>4)*10)+(bcd & 0x0f);
}
//十进制转BCD码函数
unsigned char D_BCD(unsigned char Dec)
{
        return (Dec/10*16+Dec%10);
}
回复

使用道具 举报

ID:883242 发表于 2024-4-8 07:57 | 显示全部楼层
zhuls 发表于 2024-4-7 18:52
24转0x24(数字转换):
(24/10)*16+24%10  ; //===>0x14
24转16进制(数值变换):

你查下NMEA0183格式,人家是ASCII字符串!
回复

使用道具 举报

ID:1117741 发表于 2024-4-23 14:52 | 显示全部楼层
在C语言中,可以使用标准库函数sprintf来实现十进制转十六进制。如:

#include <stdio.h>
#include <stdlib.h>

void decimal_to_hexadecimal(int decimal_number) {
    char hex_string[100];
    sprintf(hex_string, "%x", decimal_number);
    printf("%s\n", hex_string);
}

int main() {
    int number = 255;
    decimal_to_hexadecimal(number);
    return 0;
}
回复

使用道具 举报

ID:1034262 发表于 2024-4-23 15:51 | 显示全部楼层
((((a*10)+b)*10+c)*10+d)*10....
回复

使用道具 举报

ID:140275 发表于 2024-4-23 16:09 | 显示全部楼层
BCD整数转换为二进制整数(3位)       
;入口:R0(高位地址),N位数;出口:R2,R3,R4       
;占用资源:ACC,B;堆栈需求:2字节       
IPP3:        MOV        R7,N       
        CLR        A       
        MOV        R2,A       
        MOV        R3,A       
        MOV        R4,A       
IPP31:        MOV        A,R4       
        MOV        B,#0AH       
        MUL        AB       
        MOV        R4,A       
        MOV        A,B       
        XCH        A,R3       
        MOV        B,#0AH       
        MUL        AB       
        ADD        A,R3       
        MOV        R3,A       
        CLR        A       
        ADDC        A,B       
        XCH        A,R2       
        MOV        B,#0AH       
        MUL        AB       
        ADD        A,R2       
        MOV        R2,A       
        MOV        A,R4       
        ADD        A,@R0       
        INC        R0       
        MOV        R4,A       
        CLR        A       
        ADDC        A,R3       
        MOV        R3,A       
        CLR        A       
        ADDC        A,R2       
        MOV        R2,A       
        DJNZ        R7,IPP31       
        RET       
回复

使用道具 举报

ID:883242 发表于 2024-4-23 17:19 | 显示全部楼层
1534545848 发表于 2024-4-23 16:09
BCD整数转换为二进制整数(3位)       
;入口:R0(高位地址),N位数;出口:R2,R3,R4       
;占用资源:ACC,B;堆栈需求:2字 ...

不对,楼主要的是ascii码转十六进制。
回复

使用道具 举报

ID:76044 发表于 2024-7-25 09:55 | 显示全部楼层
经过多天思考,有了个想法,可以根据十位上的数乘一个基数6,如10 十位是1,6乘以1得6,20 十位是2,6乘以2得12,30 十位是3,6乘以3得18,如此类推,再相加本数
结果就是如,十进制#30,转换后就是十六进制#48H
回复

使用道具 举报

ID:1116913 发表于 2024-7-25 10:31 | 显示全部楼层
十进制转化为十六进制计算方式,简单说就是整数除以16取余,直到商为0为止,然后从最后一个余数读到第一个
回复

使用道具 举报

ID:624769 发表于 2024-7-26 21:17 | 显示全部楼层
lxm41577 发表于 2024-7-25 09:55
经过多天思考,有了个想法,可以根据十位上的数乘一个基数6,如10 十位是1,6乘以1得6,20 十位是2,6乘以2 ...

晕死, 晕倒彻底死的那种, 十进制  48, 转成16进制  才是 30H  !!!!
而不是 十进制 30 转成 16进制 变 48H !!!!!
你这多天思考,都思考了啥?拿个笔算算,都不会算成这样。
回复

使用道具 举报

ID:76044 发表于 2024-7-27 14:56 | 显示全部楼层
188610329 发表于 2024-7-26 21:17
晕死, 晕倒彻底死的那种, 十进制  48, 转成16进制  才是 30H  !!!!
而不是 十进制 30 转成 16进制 ...

兄弟,也许你看不上我的方法,我搞单片机只是爱好,为了这个SD1302走时,GPS校对的时钟,我想了好久,我秉持的是能用即为合理的原则,这个方法已经在我的时钟上,正常运行了几天了,以后有问题交流交流
回复

使用道具 举报

ID:466250 发表于 2024-7-27 15:51 | 显示全部楼层
10位一个数就增加6,相当于扩大了1.6倍。
10进制的数先整合到16进制的数,10位的就x10,个位保持,最后相加。就已经是16进制的数了。
比如8位的值,4c可拆分为4与c。以此类推
回复

使用道具 举报

ID:332444 发表于 2024-7-27 18:18 | 显示全部楼层
进制快速转换.png
回复

使用道具 举报

ID:1129742 发表于 2024-7-28 20:04 | 显示全部楼层
十进制转换为十六进制是一个常见的编程和计算机科学任务。以下是十进制数转换为十六进制数的基本步骤:

确定需要转换的十进制数:选择一个十进制数,例如我们转换十进制数 255。

连续除以16:将十进制数除以16,记录余数。然后将商继续除以16,再记录余数,重复这个过程直到商为0。

255 ÷ 16 = 15 余 15(十六进制表示为 F)
15 ÷ 16 = 0 余 15(十六进制表示为 F)
记录余数:将每次除法的余数从后向前(即从最后一步到第一步)记录下来,这些余数就是十六进制数的每一位。

在我们的例子中,余数是 F 和 F,所以从后向前读,十六进制数是 FF。
特殊情况:如果余数是10到15之间的数字,它们在十六进制中分别表示为 A 到 F。

结果:将这些十六进制的数字组合起来,就得到了十进制数的十六进制表示。

例如,十进制数 255 的十六进制表示是 FF。

在编程中,许多语言提供了内置函数来执行这种转换。例如,在C语言中,你可以使用 printf 函数和 %X 格式化输出选项来打印一个整数的十六进制表示:

c
#include <stdio.h>

int main() {
    int decimal = 255;
    printf("The hexadecimal representation of %d is %X\n", decimal, decimal);
    return 0;
}
这段代码会输出:

The hexadecimal representation of 255 is FF
在某些编程环境中,可能需要使用不同的格式化选项,例如 %x(小写)或可能需要其他函数来执行转换
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表