代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned char BYTE;
typedef unsigned int DWORD;
typedef unsigned short WORD;
/*******************************************************************************************
函数名称: BcdTime2String
描 述 : BCD时间转为字符串函数 (按照格式)
输入参数: 将要转换的BCD数组:bcd_buf ,以及转换之后将要保存到的数组:tmp_buf
输出参数: 无
返 回 : 无
********************************************************************************************/
void BcdTime2String(BYTE bcd_buf[], BYTE tmp_buf[] )
{
/* 文件名格式为: “2018-09-15 12:25:26.mp4” */
tmp_buf[0] = '2'; //2 /* 年份 */
tmp_buf[1] = '0'; //0
tmp_buf[2] =( bcd_buf[0] >> 4) +( 0x30); //1 (BCD码转为ASCII码时要加0x30,还要注意运算符优先级)
tmp_buf[3] = (bcd_buf[0] & 0x0f) + (0x30); //8
tmp_buf[4] = 0x2D; // - 中间横杠的ASCII码
tmp_buf[5] =( bcd_buf[1] >> 4) +( 0x30); //0 /* 月份 */
tmp_buf[6] = (bcd_buf[1] & 0x0f) + (0x30); //9
tmp_buf[7] = 0x2D; // - ()
tmp_buf[8] = ( bcd_buf[2] >> 4) +( 0x30); //1 /* 天数 */
tmp_buf[9] = (bcd_buf[2] & 0x0f) + (0x30);//5
tmp_buf[10] = 0x20; // 空格的ASCII码
tmp_buf[11] = ( bcd_buf[3] >> 4) +( 0x30);//1 /* 小时 */
tmp_buf[12] = (bcd_buf[3]& 0x0f) + (0x30);//2
tmp_buf[13] = 0x3A; //冒号的ASCII码
tmp_buf[14] = ( bcd_buf[4] >> 4) +( 0x30); //2 /* 分钟 */
tmp_buf[15] = (bcd_buf[4] & 0x0f) + (0x30); //5
tmp_buf[16] = 0x3A; //冒号的ASCII码
tmp_buf[17] = ( bcd_buf[5] >> 4) +( 0x30); //2 /* 秒数 */
tmp_buf[18] = (bcd_buf[5] & 0x0f) + (0x30); //6
}
/*******************************************************************************************
函数名称: String2BcdTime
描 述 : 把文件名字符串转为BCD码时间
输入参数: 将要转换的保存文件名字符串的数组 ,以及转换之后将要保存bcd时间的数组
输出参数: 无
返 回 : 无
********************************************************************************************/
void String2BcdTime(BYTE name_buf[], BYTE bcd_buf[])
{
/* 文件名格式为: “2018-09-15 12:25:26.mp4” */
/* BCD 时间格式为 “180915122526” */
bcd_buf[0] = (BYTE)((name_buf[2] - '0')<<4) + (name_buf[3] - '0');
bcd_buf[1] = (BYTE)((name_buf[5] - '0')<<4) + (name_buf[6] - '0');
bcd_buf[2] = (BYTE)((name_buf[8] - '0')<<4) + (name_buf[9] - '0');
bcd_buf[3] = (BYTE)((name_buf[11] - '0')<<4) + (name_buf[12] - '0');
bcd_buf[4] = (BYTE)((name_buf[14] - '0')<<4) + (name_buf[15] - '0');
bcd_buf[5] = (BYTE)((name_buf[17] - '0')<<4) + (name_buf[18] - '0');
}
void printf_debug(BYTE name_buf[], BYTE bcd_buf[], BYTE tmp_buf[])
{
int i;
printf(" name_buf : %s \n",name_buf);
printf(" bcd_buf : ");
for(i=0;i<6;i++)
printf("%02x",bcd_buf[i]);
printf("\n");
printf(" tmp_buf : %s \n",tmp_buf);
}
int main()
{
BYTE name_buf[32] = "2018-09-15 12:25:26.mp4";
BYTE bcd_buf[6] = {0};
BYTE tmp_buf[32] = {0};
printf_debug(name_buf, bcd_buf, tmp_buf);
/*字符串转为BCD码时间*/
String2BcdTime(name_buf, bcd_buf);
printf_debug(name_buf, bcd_buf, tmp_buf);
/*BCD码转为字符串*/
BcdTime2String(bcd_buf, tmp_buf);
printf_debug(name_buf, bcd_buf, tmp_buf);
return 0;
}
运行结果:
root@ubuntu:/home# ./test
name_buf : 2018-09-15 12:25:26.mp4
bcd_buf : 000000000000
tmp_buf :
name_buf : 2018-09-15 12:25:26.mp4
bcd_buf : 180915122526
tmp_buf :
name_buf : 2018-09-15 12:25:26.mp4
bcd_buf : 180915122526
tmp_buf : 2018-09-15 12:25:26
root@ubuntu:/home#