正在将字节写入文件
Writing bytes to file
我目前正在开发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
相关文章:
- 在UNIX系统中使用DIR查找文件的字节大小
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 如何使用 fprintf 将连续的 512 字节保存到文件中
- 用于 progmem 的C++和头文件压缩的 Web 文件字节数组
- 为什么未关闭的文件大小为 4 字节
- 我能确定从文件中读取的 32 字节二进制数据等于 256 位吗?
- Ascii .txt文件到字节数组 - C++
- 多部分/表单数据丢失大文件的字节
- 我该如何循环遍历我的数组(缓冲区——包含一个文本文件),并将其打印成30字节的块
- 程序错误地读取了二进制文件的一个字节
- 如何从 C 或 C++ 格式的文件中删除字节?
- C++ - 将任何文件的字节读取到无符号字符数组中
- ofstream将额外的零字节写入Unix服务器上的文件
- 传输文件一次又一次地发送相同的字节
- 编码大于原始文本:如何获取零和一的字符串并将它们作为实际字节写入文件
- 查找二进制文件中字节序列的所有匹配项
- 如何从 GDI+ 图元文件对象获取原始图元文件字节