正在将字节写入文件

Writing bytes to file

本文关键字:文件 字节      更新时间:2023-10-16

我目前正在开发DBF文件管理器,遇到了一些问题。。。

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

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

在我的例子中,文件类型是03h,这个字段必须只使用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(即0 | 0 | FF | 0)执行AND,则会得到

my_date & 0xFF00 = 0 | 0 | month | 0

现在你所需要做的就是把你的数据移回来,所以

(my_date & 0xFF00) >> 8 = 0 | 0 | 0 | month = month

希望现在更清楚了。

年份的第一个字节:2000+YY。可以从2000计数到2255

月份的第二个字节:1-12

第三天字节:1-31