4个字节的16进制数字转换成标准时间,C++
相反过来,知道目前的标准时间,怎么转化成4个字节的16进制数
请附上C++代码,谢谢 展开
#include <stdio.h>
#include <math.h>
#define YEAR (60*60*24*356)
#define MONTH (60*60*24*30)
#define DAY (60*60*24)
#define HOUR (60*60)
#define MINUTE 60
void HexToTime(unsigned char *p, int n)
{
unsigned int temp=0;
unsigned int y=0,mon,d,h,min,sec;
/*unsigned char mon=0;
unsigned char d=0;
unsigned char h=0;
unsigned char min=0;
unsigned char sec=0;*/
int i;
for(i=0; i<8; i++){
switch( *(p+i) )
{
case 'A':
case 'a': *(p+i)=10; break;
case 'B':
case 'b': *(p+i)=11; break;
case 'C':
case 'c': *(p+i)=12; break;
case 'D':
case 'd': *(p+i)=13; break;
case 'E':
case 'e': *(p+i)=14; break;
case 'F':
case 'f': *(p+i)=15; break;
default: *(p+i)=*(p+i)-'0';
}
}
temp=*(p+7)+
*(p+6)*16+
*(p+5)*16*16+
*(p+4)*16*16*16+
*(p+3)*16*16*16*16+
*(p+2)*16*16*16*16*16+
*(p+1)*16*16*16*16*16*16+
(*p)*16*16*16*16*16*16*16;
y=temp/YEAR;mon=temp%YEAR/MONTH;
d=temp%YEAR%MONTH/DAY;
h=temp%YEAR%MONTH%DAY/HOUR;
min=temp%YEAR%MONTH%DAY%HOUR/MINUTE;
sec=temp%YEAR%MONTH%DAY%HOUR%MINUTE;
printf("\nThe current is :");
printf("\n%-6d%-6d%-6d%-6d%-6d%-6d",sec,min,h,d,mon,1970+y);
}
int main(void)
{
unsigned char arra[8];
//unsigned char arra[8]={"4e056450"};
// unsigned char arra[8]={'4','e','0','5','6','4','5','0'};
printf("please input 8 char\n");
scanf("%s",arra);
HexToTime(arra,8);
return 0;
}
在VS2008测试通过。
2022-05-15 广告
一年是365天(闰年366天)啊,不是356天。
所以不管LS写了多少都不可能是对的。
其实已经有现成的函数可以满足LZ的条件了
当包含<time.h>这个头文件后,可以使用以下几个函数。
__time32_t _time32(__time32_t *timer);
其中__time32_t就是LZ说的从1970年开始到现在的秒数,并且是32位,4字节。参数是个指针,可以认为是输出参数。即此函数会将timer改成你所需要的秒数。返回值相同的功能。
errno_t _localtime32_s(struct tm* _tm, const time32_t *time);
这个函数能够将LZ说所得那个秒数,即time转换为一个tm类型结构体_tm。这是time.h中定义的一个描述时间的结构体,包含年月日时分秒等。完全符合LZ你的要求。这里要注意返回值,只有当返回值是0时,才代表转换成功。非0返回值都代表错误代码。
__time32_t _mktime32(struct tm *timeptr);
这个函数和上面的那个功能类似,只不过正好反过来。
以下是例子:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main( )
{
char buff[128]={0};
tm _tm;
__time32_t timer;
_time32(&timer); //以秒数的形式得到当前系统时间。
if (_localtime32_s(&_tm, &timer)) //将秒数转换为tm类型结构体。
{
exit(0);
}
if (asctime_s(buff , &_tm)) //将_tm转换为字符串,以便于打印到屏幕上。
{
exit(0);
}
cout << buff << endl;
buff[0]='\0';
timer = _mktime32(&_tm); //将tm类型结构体再转回秒数。
if (_ctime32_s(buff, &timer)) //将秒数转换为字符串,以便于打印到屏幕上。
{
exit(0);
}
cout << buff << endl;
system("pause");
}
输出结果:
Fri Oct 12 23:16:32 2012
Fri Oct 12 23:16:32 2012
请按任意键继续. . .