将十六进制值转换为十进制值

Transfer hex value to a decimal value

我正在尝试使用值 .Hours.Minutes.Seconds 操作结构 atime1 的值,并且出于某种原因,我需要的值是这些变量的十六进制值,所有树都是int.

然后我以不改变十六进制值的方式“连接”三个变量。 十六进制值:

aTime.Hours=0x13
aTime.Minutes=0x30
aTime.Seconds=0x15
ttt=0x133015

然后我需要将 dec 值为 12574930x133015 的变量 ttt 转换为十进制值 133015.

这就是我不知道如何进行转换的地方。

这里是我的代码。

HAL_RTC_GetTime(&hrtc, &aTime1, RTC_FORMAT_BCD);
HAL_RTC_GetDate(&hrtc, &aDate1, RTC_FORMAT_BCD);
ttt = aTime1.Hours;
ttt = ((ttt % 100000) * 256 + aTime1.Minutes);
ttt = ((ttt % 100000) * 256 + aTime1.Seconds);

来自实时时钟 (RTC) 的信息以二进制编码的十进制 (BCD) 格式发送给您。这意味着每个字节由两个十进制数字组成。最高位十进制数(MSDD)在高四位,最低位十进制数(LSDD)在低四位。

所以第一步是提取单个数字,我会将这些数字存储在一个数组中。要提取 MSDD,请右移 4 位。要提取 LSDD,请使用 0xf.

进行屏蔽

提取数字后,可以使用for循环来产生最终结果。

代码如下所示:

#include <stdio.h>

struct stTime
{
    int Hours;
    int Minutes;
    int Seconds;
};

int main(void)
{
    struct stTime aTime = { 0x13, 0x30, 0x15 };

    int digits[6];
    digits[0] = aTime.Hours >> 4;
    digits[1] = aTime.Hours & 0xf;
    digits[2] = aTime.Minutes >> 4;
    digits[3] = aTime.Minutes & 0xf;
    digits[4] = aTime.Seconds >> 4;
    digits[5] = aTime.Seconds & 0xf;

    int result = 0;
    for (int i = 0; i < 6; i++)
        result = result * 10 + digits[i];

    printf("%d\n", result);
}

输出:133015