美文网首页程序员
实现了一个转化数据文本为二进制文件的工具

实现了一个转化数据文本为二进制文件的工具

作者: qianlihu | 来源:发表于2018-06-12 22:44 被阅读32次

这是我个人用来学习编译原理,练习实现的工具

假设我们有一个数据文本文件如下:

  0x00000001,     0x0000012a,     0x01042018,     0x000406d8,
  0x7cacb989,     0x00000001,     0x00000001,     0x00014bd0,
  0x00014c00,     0x00000000,     0x00000000,     0x00000000,
  0x00000000,     0x000000a1,     0x00020001,     0x0000012a,
  0x00000000,     0x00000000,     0x20180103,     0x00005271,
  0x00000001,     0x000406d8,     0x00000000,     0x00000000,
  0x00000000,     0x00000000,     0x00000000,     0x00000000,
  0x00000000,     0x000052f4,     0x00000000,     0x00000000,
  0x00000000,     0x00000000,     0x00000000,     0x00000000,
  ...

我们要将其转为二进制数据存储,利用hexdump 查看如下

0000000 0001 0000 012a 0000 2018 0104 06d8 0004
0000010 b989 7cac 0001 0000 0001 0000 4bd0 0001
0000020 4c00 0001 0000 0000 0000 0000 0000 0000
0000030 0000 0000 00a1 0000 0001 0002 012a 0000
0000040 0000 0000 0000 0000 0103 2018 5271 0000
0000050 0001 0000 06d8 0004 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
0000070 0000 0000 52f4 0000 0000 0000 0000 0000

用c语言实现此项功能很简单,一般需要如下几步

  1. 按行读取文件
  2. 利用strchr 或 strtok函数分割字符串
  3. 解析数据,转换(此时要考虑大小端),存储到文件。

如果从编译原理的角度考虑这个问题可以为:

  1. 编译一个文本文件为二进制数据文件
  2. 这比实现c语言到机器码要简单的多
  3. 不够实现起来依然要考虑分词,语法分析,状态转移,后端调优等动作。

目前的实现:

  1. 采用逐字解析,解析过程不回溯。
  2. 不生成语法树
    3 一轮编译,后端调优以大小端转化的形式模拟。

调试期间遇到的问题:

  1. 混淆了 get_token get_next_token的语义
  2. get_token 直接返回了指针,导致后续判断逻辑混乱,应直接返回ascii码
  3. EOF判断逻辑混乱,EOF判断应在解析最上层判断

下一步:

  1. 重写strtol语义函数
  2. 后续会更新此仓库,完成对编译原理基本知识的学习

代码:
代码放在了github

相关文章

  • 实现了一个转化数据文本为二进制文件的工具

    这是我个人用来学习编译原理,练习实现的工具 假设我们有一个数据文本文件如下: 我们要将其转为二进制数据存储,利用h...

  • Hibernate学习6(长文本与二进制文件保存读取)

    在数据表对应的实体内中长文本与二进制文件对应的属性为: 长文本对应String类型 二进制文件对应 Blob类型(...

  • 认识数据透视表

    数据透视表是一个引擎,是一个工具。它可以把Excel中的数据清单、数据库、文本文件、以及其他关系型数据文件转化成透...

  • 7.python3编码问题

    1.python 的文本数据和二进制数据 python的文本数据为String(默认编码utf-8),二进制数据为...

  • 数据透视表

    一、认识数据透视表 其实就是引擎、工具,可以把数据清单、数据库、文本文件、其他关系型数据文件转化成数据透视表或数据...

  • C语言基础。。。。(文件-宏定义)

    C语言基础 文件 设备文件:scoket,FIFO,sda 普通文件:二进制文件,文本文件二进制文件格式:数据按其...

  • python利用numpy存取文件

    NumPy提供了多种存取数组内容的文件操作函数。保存数组数据的文件可以是二进制格式或者文本格式。二进制格式的文件又...

  • [新课发布] Base64 编码原理

    你知道: 为什么发送邮件的时候可以添加图片、音频、视频这种二进制文件作为附件吗? 如何将二进制数据编码为文本数据吗...

  • c++ 读写文件

    写文件文本 读文件文本 读写二进制文件

  • 10-文件的操作

    文本文件和二进制文件 文本文件可以使用文本编辑器查看,本质还是二进制文件。二进制文件保存的文件不是给人直接阅读的,...

网友评论

    本文标题:实现了一个转化数据文本为二进制文件的工具

    本文链接:https://www.haomeiwen.com/subject/fzxdeftx.html