一个文本文件用od命令读出后能不能还原?

软件和网站开发以及相关技术探讨
回复
qwetro
帖子: 41
注册时间: 2009-05-29 22:48

一个文本文件用od命令读出后能不能还原?

#1

帖子 qwetro » 2009-09-04 0:22

比如一个文本文件.只包含一句话.hello world.
用od命令读出一串8进制数..
怎么才能从那串八进制数中还原出"hello world"的信息呢?

如果是图片用 od 读出呢??..怎么还原出一张图...

虽然这个好像没什么实用..还是想知道.

顺便问下..如果文件比较大..在终端用 od 命令的话,,不能完全显示(旁边的滚动条拉到最顶上时数据都满的)..那要怎样才能把这些数字保存下来呢?


三个问题..
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
联系:

Re: 一个文本文件用od命令读出后能不能还原?

#2

帖子 dbzhang800 » 2009-09-04 16:15

当然可以还原,不过你需要了解的文本的编码问题。 你应该知道,即使是hello world ,也简单的几个英文字符,你保存成 utf8还是unicode格式,两个文件的二进制都是不同的
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 一个文本文件用od命令读出后能不能还原?

#3

帖子 lilydjwg » 2009-09-04 23:14

如果文件比较大..在终端用 od 命令的话,,不能完全显示(旁边的滚动条拉到最顶上时数据都满的)..那要怎样才能把这些数字保存下来呢?
重定向

代码: 全选

od file > destination_file
qwetro
帖子: 41
注册时间: 2009-05-29 22:48

Re: 一个文本文件用od命令读出后能不能还原?

#4

帖子 qwetro » 2009-09-05 10:19

dbzhang800 写了:当然可以还原,不过你需要了解的文本的编码问题。 你应该知道,即使是hello world ,也简单的几个英文字符,你保存成 utf8还是unicode格式,两个文件的二进制都是不同的
这个我知道.能说下具体怎么做吗?


有听说如果是PNG的二进制码的话,,要自己写个文件头,然后就能够还原..但是既然是读取一个文件,总不会给漏掉个文件头吧..

图片先不说..那个hello world的文本要怎样还原出来呢?假设编码是utf-8的话.
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
联系:

Re: 一个文本文件用od命令读出后能不能还原?

#5

帖子 dbzhang800 » 2009-09-05 12:44

假定你的文本文件内容为(windows或linux下默认编码即可,没有文件头:比如windows下记事本另存为utf8时,就会添加)

代码: 全选

hello world
运行

代码: 全选

od filename.txt
结果为(我的系统是小端的,大端的会与此不同):

代码: 全选

0000000 062550 066154 020157 067567 066162 000144
0000013
od 的工作原理不多说了:
od prints the offset in octal, and each group of file data is a C short int's worth of input printed as a single octal number.
下面只简单看一下 062550 是怎么由“he”生成的
h 的 ASCII 码0x68, 二进制 0110 1000
e 的 ASCII 码0x65, 二进制 0110 0101

od 将其作为短整型用8进制显示出来,在小端机器上,该短整型 高8位为 0x65, 低8位为 0x68
于是该短整数:

代码: 全选

0110 0101 0110 1000
为了容易看一点

代码: 全选

0 110 010 101 101 000
也就是

代码: 全选

0 6 2 5 5 0
至于怎么还原回去,不用多说了吧?
qwetro
帖子: 41
注册时间: 2009-05-29 22:48

Re: 一个文本文件用od命令读出后能不能还原?

#6

帖子 qwetro » 2009-09-06 14:15

我能再贪心的问下。。图片怎么还原吗?

这个好像比较复杂了。。 :em06

不然指个方向给我吧?
回复