将字节写入文件

时间:2014-02-08 20:02:25

标签: c++ binaryfiles

我目前正在处理DBF文件管理器,但我遇到了一些问题...

组成标题的元素之一是文件更新的最后日期。 问题是:字段格式是YYMMDD,它必须有3个字节。

如何仅使用3个字节来编写使用该格式的日期?另外,另一个字段表示文件的类型(如果它有备忘录)。

我的情况下的文件类型是03h,这个字段必须只使用1个字节。我很困惑。

2 个答案:

答案 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