C语言: BCD码(时间)和字符串之间的相互转换

代码如下:

#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# 

猜你喜欢

转载自blog.csdn.net/weixin_38184741/article/details/84587268