我目前正在处理DBF文件管理器,但我遇到了一些问题...
组成标题的元素之一是文件更新的最后日期。 问题是:字段格式是YYMMDD,它必须有3个字节。
如何仅使用3个字节来编写使用该格式的日期?另外,另一个字段表示文件的类型(如果它有备忘录)。
我的情况下的文件类型是03h,这个字段必须只使用1个字节。我很困惑。
答案 0 :(得分:1)
我会将您的数据保存为3个字节
每个字段(每年,每月,每天)的每个字节都有足够的空间。您可以使用位移操作将它们写成整数,如下所示:
int year = 13;
int month = 7;
int day = 26;
int my_date = (year << 16) | (month << 8) | day;
编辑:
我在my_date中做了什么:我基本上将您需要的信息(年,月,日)连接成一系列位(每个信息字段8位),作为整数。您知道int
是4个字节。考虑到my_date
为0的初学者,也就是说,所有32位都是0.它的4个字节如下(“|”表示连接;这是为了便于阅读):
my_date = 0 | 0 | 0 | 0
当我写year << 16
时,我有
year << 16 = 0 | year | 0 | 0
以类似的方式,
month << 8 = 0 | 0 | month | 0
day = 0 | 0 | 0 | day
当我对所有这些操作应用OR运算符时,my_date看起来像这样:
my_date = 0 | year | month | day
访问它们:
year = (my_date & 0xFF0000) >> 16;
month = (my_date & 0xFF00) >> 8;
day = my_date & 0xFF;
编辑:访问的工作原理。我们以前有过
my_date = 0 | year | month | day
例如,如果您使用带有0xFF00的AND,0 | 0 | FF | 0
,那么
my_date & 0xFF00 = 0 | 0 | month | 0
现在您需要做的就是将数据转移回来,所以
(my_date & 0xFF00) >> 8 = 0 | 0 | 0 | month = month
希望现在更清楚了。
答案 1 :(得分:0)
年份的第一个字节:2000 + YY。可以算从2000年到2255年
月份的第二个字节:1-12
白天的第三个字节:1-31