中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 怎么用debug 命令实现将数字文本(ASCII)文件转换成二进制文件
« [1] [2] »
作者:
标题: 怎么用debug 命令实现将数字文本(ASCII)文件转换成二进制文件 上一主题 | 下一主题
enjoyer
中级用户

部落守望者


积分 351
发帖 140
注册 2006-6-19
状态 离线
『楼 主』:  怎么用debug 命令实现将数字文本(ASCII)文件转换成二进制文件

我知道可以用e命令将数字从键盘输入, 再用w写文件的办法实现. 但这样很是麻烦. (如果用重定位的办法,文本里又要插入很多的e命令和空格) 诸位有没有更好的办法呢?

[ Last edited by enjoyer on 2006-11-29 at 07:34 AM ]



一切从底层开始
2006-11-28 09:50
查看资料  发送邮件  发短消息 网志  OICQ (363852426)  编辑帖子  回复  引用回复
enjoyer
中级用户

部落守望者


积分 351
发帖 140
注册 2006-6-19
状态 离线
『第 2 楼』:  怎么,作不到吗?

没人回,自己顶一下



一切从底层开始
2006-12-1 01:40
查看资料  发送邮件  发短消息 网志  OICQ (363852426)  编辑帖子  回复  引用回复
enjoyer
中级用户

部落守望者


积分 351
发帖 140
注册 2006-6-19
状态 离线
『第 3 楼』:  真地没办法了吗?

还是没人知道, 应个声吗.



一切从底层开始
2006-12-1 01:43
查看资料  发送邮件  发短消息 网志  OICQ (363852426)  编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 4 楼』:  

说实话,我没能理解你的意思。你说的二进制文件是怎么个二进制文件?最好举例说明一下。



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-12-1 07:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 5 楼』:  

来看下面这个贴子,可能会有兄需要的内容~:)


此代码会生成临时文件.如何让它不生成
http://www.cn-dos.net/forum/view ... id=mf2rxE#pid155430



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-1 07:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
enjoyer
中级用户

部落守望者


积分 351
发帖 140
注册 2006-6-19
状态 离线
『第 6 楼』:  更详细的解释...



  Quote:
Originally posted by DOSforever at 2006-12-1 07:04:
说实话,我没能理解你的意思。你说的二进制文件是怎么个二进制文件?最好举例说明一下。

怪我没说明白, 举个例子吧. 比如说在notebook里随意键入一串数字, 保存. 此时计算机磁盘里保存的是这些数字的 ASCII码,  而我想让得到的是真值. 怎么办? 除自己写程序外, 我想到的一个办法是:
编辑文本, 内容如下:
e100 32  34  f5  53  8a 8c 98 2e
e108 5f  ff  fe  30  5b 1e 20 39
... ...
n num.txt
rcx
xx
w
q
保存为1.txt 后,进入dos窗口,来到保存路径下: debug <  1.txt 回车
于是就生成 二进制文件 num.txt (可以用debug 加载验证)
但这种方法要在数字里加入空格, 各行前都要有debug命令e..., 而且要计算行首对应地址, 仍嫌麻烦. 就是想知道debug有没有更便捷的方法,完成这个转换.  
请兄帮帮忙, 多谢关注.
还有redtek兄也谢谢你的热心, 不过我对dos批处理不懂, 看来还得跟论坛的朋友多学学练练才是.



一切从底层开始
2006-12-1 10:25
查看资料  发送邮件  发短消息 网志  OICQ (363852426)  编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 7 楼』:  



  Quote:
此时计算机磁盘里保存的是这些数字的 ASCII码,  而我想让得到的是真值.

我是这么认为的:实际上计算机中所有的数据都是以二进制形式保存和流动的,不存在以ASCII码保存或以真值保存这种说法,只是当这些数据显示给你看的时候,你想以什么形式给显示出来。可以以十六进制形式、ASCII码形式、二进制形式、八进制形式等等。只是前两种是我们最常用的形式。
根据你的例子,我想你是想得到文件内容中每个字节的十六进制的值是什么,对吗?也就是说,对一个已知文件想让它以十六进制值的方式显示出来,对吗?



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-12-1 11:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
enjoyer
中级用户

部落守望者


积分 351
发帖 140
注册 2006-6-19
状态 离线
『第 8 楼』:  回复DOSforever



  Quote:
Originally posted by DOSforever at 2006-12-1 11:27:


我是这么认为的:实际上计算机中所有的数据都是以二进制形式保存和流动的,不存在以ASCII码保存或以真值保存这种说法,只是当这些数据显示给 ...

你说的没错, 在计算机内部都是二进制表示,并没有区别. 如果我想看某一文件的二进制内容,可以用UltraEdit的16进制方式 , 或者debug 加载查看. 这没有问题. 某些文本编辑器(象debug,UE32) 带有从bin到ASCII值的转换,    即:
    45H(bin形式存于内存中) -> 34 35(ASCII值) ->按ASCII表对应关系显示(显示器)
我想要的功能刚好相反, 如下:
34 35(保存在内存中的ASCII值) -> 45H (保存在内存中的bin)
  即完成一个文本数据到二进制的转换.  如果数据很少还可以, 用先前的文件重定向办法就能应付, 关键是批量数据就不好办了.

[ Last edited by enjoyer on 2006-12-2 at 08:27 AM ]



一切从底层开始
2006-12-2 07:36
查看资料  发送邮件  发短消息 网志  OICQ (363852426)  编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 9 楼』:  

我是看得有点糊涂了,你的理解可能对的,但你的表达我认为有点错误。我是使劲的想,费力的思考。大概有点猜对你的意思了。

“45H”就已经是表示ASCII码值了,即该字节的二进制值为 01000101B ,表示成十六进制值为 45H ,你看到的 45 ≠ "4" "5" 这两个字符(当然,为了告诉你它的十六进制值为多少,显示出来的是"4"和"5"这两个字符)。45H 所对应的ASCII码字符为 "E" 。所以应该这么说我认为比较确切些:

01000101B(bin形式存于内存中)-> 45H(hex表示。ASCII值)-> 字符"E"(按ASCII表码值对应的字符显示出来)

你的问题应该这么说:已知ASCII码值(并且是十六进制的),求如得到它对应的ASCII字符。对吗?是这意思吗?



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-12-2 09:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
enjoyer
中级用户

部落守望者


积分 351
发帖 140
注册 2006-6-19
状态 离线
『第 10 楼』:  

呵呵,其实我也是使劲的想,费力的思考,想让你很容易地明白我的问题, 没想到反而弄巧成拙了(因为是按自己的理解来解释). 为不再造成误解, 我用尽量少的语句说明白:
     文件A,内容:  00110100 00110101(34H,35H占两个字节) ->  文件B, 内容: 01000101(45H,占一个字节) , 上面的转换我不想自己编程,想用debug命令实现.问,有没有这种可能.



一切从底层开始
2006-12-3 07:13
查看资料  发送邮件  发短消息 网志  OICQ (363852426)  编辑帖子  回复  引用回复
DOSforever
金牌会员





积分 4639
发帖 2239
注册 2005-1-30
状态 离线
『第 11 楼』:  

除了你不想用的 e 命令外,没有用 debug 实现的这种可能。
可以用 4DOS 的 @char 变量函数加以转换,如果你原文件的内容全都是十六进制的数值,可以在 @char 中嵌套 @convert 变量函数转换十六进制值为十进制值,因为 @char 只能用十进制数作为变量。



DOS倒下了,但永远不死
DOS NEVER DIES !

投票调查:
http://www.cn-dos.net/forum/viewthread.php?tid=46187

本人尚未解决的疑难问题:
http://www.cn-dos.net/forum/viewthread.php?tid=15135
http://www.cn-dos.net/forum/viewthread.php?tid=47663
http://www.cn-dos.net/forum/viewthread.php?tid=48747
2006-12-3 09:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复
enjoyer
中级用户

部落守望者


积分 351
发帖 140
注册 2006-6-19
状态 离线
『第 12 楼』:  

没学过批处理, 先学学再说吧, 谢谢了



一切从底层开始
2006-12-3 09:38
查看资料  发送邮件  发短消息 网志  OICQ (363852426)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 13 楼』:  

我想可以用命令生成一个和目标文件一样大小的文件,然后用FC/B命令来进行2进制比较,然后将比较的结果里是目标文件里的二进制取出来保存为文件就可以了

   此帖被 +5 点积分      点击查看详情   
评分人:【 redtek 分数: +5  时间:2006-12-4 07:39




我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-12-3 09:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 14 楼』:  

楼上仍然理解反了!

而且没有多大的实现可能性,因为fc/b只显示不同的字节值,这样目标内容势必会有丢失。

建议楼主看看这个帖子

http://www.cn-dos.net/forum/viewthread.php?tid=21955&fpage=1

2006-12-4 07:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tigerpower
中级用户

大师兄


积分 377
发帖 99
注册 2005-8-26
状态 离线
『第 15 楼』:  

使用 mawk :

E:\>dir /b mawk.exe hex.txt hex2ascii.awk
mawk.exe
hex.txt
hex2ascii.awk

E:\>more hex.txt
20 20 bb b6 d3 ad c0 b4 b5 bd d6 d0 b9 fa 44 4f
53 c1 aa c3 cb c2 db cc b3 0d 0a 57 69 6e 64 6f
77 73 d0 c2 d2 bb b4 fa c3 fc c1 ee d0 d0 b9 a4
be df be a1 d4 da 3a 0d 0a 20 20 20 57 69 6e 50
45 a1 a2 50 6f 77 65 72 53 68 65 6c 6c b0 e5 bf
e9 21 0d 0a

E:\>more hex2ascii.awk
{gsub(/[ \n]*/,"")
for (i=1;i<=length($0)/2;i++){
        cmd=sprintf("mawk \"BEGIN{printf \\\"\x%s\\\"}\"\n",substr($0,i*2-1,2))
        system(cmd)}}

E:\>mawk -f hex2ascii.awk hex.txt

更多命令行工具,请到本论坛的
WinPE、PowerShell板块(点击进入)




2006-12-4 13:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: