FAT12文件系统时间和日期-C语言输出

1.介绍文件目录项

FAT每一个文件目录项都是32个字节,格式如下

偏移量长度描述
08文件名
83文件扩展名
111文件属性
1210保留位
222最后修改时间
242最后修改日期
262首簇号
284文件大小

2.时间格式

日期和时间都是从1980年算起。

FAT12文件目录项的25、26字节,一共16位储存日期。从高到低,前7位为年偏移量year,接下来4位为月偏移量month,最后5位为日偏移量day;得到的最终时间即为1980 + year年,0 + month月,0 + day日。每位表示的意义如下:

长度描述
7年偏移量
4月偏移量
5日偏移量

FAT12文件目录项的23、24字节,一共16位储存日期。从高到低,前5位为小时的偏移量hour,接下来6位为分钟偏移量minute;最终得到的时间就是:hour小时:minute分钟。每位的意义如下:

长度描述
5小时偏移量
6分钟偏移量
5保留

3.使用C语言输出

首先看如何提取日期,时间的提取要比日期简单得多


void print_date(unsigned short _date)
{
    // 提取出年
    unsigned short year = _date & 0b1111111000000000;
    year = year >> 9;
    // 提取月
    unsigned short month = _date & 0b0000000111100000;
    month = month>> 5;
    // 提取日
    unsigned short day = _date & 0b0000000000011111;
    printf("%02u-%02u-%02u", month, day, (year + 80) % 100);
}

这里对年的提取做一些说明。

假设输入的_data为0x1cbf,对应的二进制数为0001 1100 1011 1111。首先用按位与操作,将16位的unsigned short的后9位置零,前7位保留。这样得到0001 1100 0000 0000。将得到的数字右移9位得到0000 0000 0001 1100,也就是14。加上1980得到1994年。

如果运行该函数,输入0x1cbf,得到的最终输出为05-31-94。实际上这个是DOS系统的COMMAND程序的创建日期。

下面的得到时间的函数就很简单了

// 提取FAT12文件目录项中的时间
void print_time(unsigned short _time)
{
    // 提取小时
    unsigned short hour = _time & 0b1111100000000000;
    hour = hour >> 11;
    //提取分钟
    unsigned short minute = _time & 0b0000011111100000;
    minute = minute >> 5;
    printf("%02u-%02u", hour, minute);
}

继续用DOS系统的COMMAND程序的例子,这里输入0x6680,得到最终的结果为12-52,也就是中午十二点52分

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值