系统时间转换为bcd码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#include <malloc.h>
/* 获取系统时间 */
void get_sys_time(int *year, int *mon, int *day, int *hour, int *min, int *sec, int *wday)
{
    struct tm *timeinfo;
    time_t now;
    time(&now);
    timeinfo = localtime(&now);
    *year = timeinfo->tm_year + 1900;
    *mon = timeinfo->tm_mon + 1;
    *day = timeinfo->tm_mday;
    *hour = timeinfo->tm_hour;
    *min = timeinfo->tm_min;
    *sec = timeinfo->tm_sec;
    *wday = timeinfo->tm_wday;
}
 
/* 将十进制数转换成16进制数 */
void dec2hex(int input, unsigned char *output)
{
    int in_tmp = 0;
    in_tmp = input / 10;
    in_tmp <<= 4;
    in_tmp |= input % 10;
    memcpy(output, &in_tmp, 1);
}
 
/* 将当前的系统时间转换为bcd格式 */
void time_bcd(unsigned char *timebcd)
{
    int year, mon, day, hour, min, sec, wday;
    unsigned char *tmp = (unsigned char *)malloc(1 * sizeof(unsigned char));
    get_sys_time(&year, &mon, &day, &hour, &min, &sec, &wday);
    dec2hex(year / 100, tmp);
    memcpy(timebcd, tmp, 1);
    dec2hex(year % 100, tmp);
    memcpy(timebcd + 1, tmp, 1);
    dec2hex(mon, tmp);
    memcpy(timebcd + 2, tmp, 2);
    dec2hex(day, tmp);
    memcpy(timebcd + 3, tmp, 3);
    dec2hex(hour, tmp);
    memcpy(timebcd + 4, tmp, 4);
    dec2hex(min, tmp);
    memcpy(timebcd + 5, tmp, 5);
    dec2hex(sec, tmp);
    memcpy(timebcd + 6, tmp, 6);
    dec2hex(wday, tmp);
    memcpy(timebcd + 7, tmp, 7);
 
    free(tmp);
}
 
/* 输出指定内存地址空间的16进制值 */
void my_print(unsigned char *buf, int len)
{
    int i = 0;
    while (i<len)
    {
        printf("%02x", buf[i]);
        i++;
    }
    printf("\n");
}
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    unsigned char ttmp[16];
    time_bcd(ttmp);
    my_print(ttmp, 8);
    system("PAUSE");
    return 0;
}

  

关于BCDASCIIBINARAY储存示例:2015

BCD0x20 0x15

BINARY0x14 0x0f

ACSII0x320x300x310x35

 

2的ASCII码为十六进制数32,十进制数50。
  部分数字的ASCII码如下:
  数字0的ASCII码为十六进制数30,十进制数48
  数字1的ASCII码为十六进制数31,十进制数49
  数字2的ASCII码为十六进制数32,十进制数50
  数字3的ASCII码为十六进制数33,十进制数51
  数字4的ASCII码为十六进制数34,十进制数52
  数字5的ASCII码为十六进制数35,十进制数53
  数字6的ASCII码为十六进制数36,十进制数54
  数字7的ASCII码为十六进制数37,十进制数55
  数字8的ASCII码为十六进制数38,十进制数56
  数字9的ASCII码为十六进制数39,十进制数57
  ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

 

posted on   lydstory  阅读(1275)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示