c/c++开发分享Unix时间戳到FAT时间戳

我试图将时间结构转换为FAT时间戳。 我的代码看起来像:

unsigned long Fat(tm_struct pTime) { unsigned long FatTime = 0; FatTime |= (pTime.seconds / 2) >> 1; FatTime |= (pTime.minutes) << 5; FatTime |= (pTime.hours) << 11; FatTime |= (pTime.days) << 16; FatTime |= (pTime.months) << 21; FatTime |= (pTime.years + 20) << 25; return FatTime; } 

有人有正确的代码吗?

     The DOS date/time format is a bitmask: 24 16 8 0 +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ |Y|Y|Y|Y|Y|Y|Y|M| |M|M|M|D|D|D|D|D| |h|h|h|h|h|m|m|m| |m|m|m|s|s|s|s|s| +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ ___________/________/_________/ ________/____________/_________/ year month day hour minute second The year is stored as an offset from 1980. Seconds are stored in two-second increments. (So if the "second" value is 15, it actually represents 30 seconds.) 

    我不知道你正在使用的tm_struct,但如果它是http://www.cplusplus.com/reference/ctime/tm/那么

     unsigned long FatTime = ((pTime.tm_year - 80) << 25) | (pTime.tm_mon << 21) | (pTime.tm_mday << 16) | (pTime.tm_hour << 11) | (pTime.tm_min << 5) | (pTime.tm_sec >> 1); 

    Lefteris E给出了几乎正确的答案,但这里有一点错误

    你应该添加1到tm_mon,因为tm struct将月份作为数字从0到11( struct tm ),但DOS日期/时间从1到12( FileTimeToDosDateTime )。 这是正确的

     unsigned long FatTime = ((pTime.tm_year - 80) << 25) | ((pTime.tm_mon+1) << 21) | (pTime.tm_mday << 16) | (pTime.tm_hour << 11) | (pTime.tm_min << 5) | (pTime.tm_sec >> 1); 

      以上就是c/c++开发分享Unix时间戳到FAT时间戳相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545815.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注