将十六进制值转换为十进制值
Transfer hex value to a decimal value
我正在尝试使用值 .Hours
、.Minutes
、.Seconds
操作结构 atime1
的值,并且出于某种原因,我需要的值是这些变量的十六进制值,所有树都是int
.
然后我以不改变十六进制值的方式“连接”三个变量。
十六进制值:
aTime.Hours=0x13
aTime.Minutes=0x30
aTime.Seconds=0x15
ttt=0x133015
然后我需要将 dec 值为 1257493
和 0x133015
的变量 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
我正在尝试使用值 .Hours
、.Minutes
、.Seconds
操作结构 atime1
的值,并且出于某种原因,我需要的值是这些变量的十六进制值,所有树都是int
.
然后我以不改变十六进制值的方式“连接”三个变量。 十六进制值:
aTime.Hours=0x13
aTime.Minutes=0x30
aTime.Seconds=0x15
ttt=0x133015
然后我需要将 dec 值为 1257493
和 0x133015
的变量 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