![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 01:28 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » [求助]DOS下如何将TXT的16进制数据转成BIN?(已解决) |
| 可打印版本 7,960 / 22 |
| 第1楼 zh159 | 发表于 2006-07-17 02:05 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
[求助]DOS下如何将TXT的16进制数据转成BIN?(已解决) 最好不要使用第三方软件(XP系统)
找到过一个TXT_BIN软件,但只能先运行TXT_BIN软件,手动输入TXT文件回车后再输入BIN文件名生成BIN文件; 是否有直接“TXT_BIN TXT BIN”命令方式的软件,或者可以修改附件的TXT_BIN软件为“TXT_BIN TXT BIN”命令方式? [ Last edited by zxcv on 2006-7-18 at 02:24 ] 附件 txt_bin.rar (8.79 KiB) |
|
| 第2楼 GOTOmsdos | 发表于 2006-07-17 12:29 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
我可以给你写一个
但是你的这些二进制文本字符,总要有分割符吧? 否则没法处理啊。。 |
|
| 第3楼 zh159 | 发表于 2006-07-17 17:33 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
两种方式:
1、每“112233445566778899AABBCCDDEEFF”32字符一行(BIN为16字节,适合转换TXT文件) 2、所有数据单一行(适合命令行“命令 字符 BIN”方式直接写入,感觉这样的命令行很长,最高字符960个) 其实分割符就一种:回车换行(16进制“0D0A”),这个不需要转换 |
|
| 第4楼 GOTOmsdos | 发表于 2006-07-17 17:47 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
1
DOS下 C最大可处理的16进制字符的数值是4个字节(32位,(16进制为8个字符位,比如12345678,FFFFFFFF)啊,所以必须要每隔8个字符就要有分割符号啊。 浮点不能处理16进制字符 2 没弄明白你的意思。。 [ Last edited by GOTOmsdos on 2006-7-17 at 17:57 ] |
|
| 第5楼 zh159 | 发表于 2006-07-17 19:36 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
文本内容:
转换为BIN后用16进制软件打开看到的16进制内容也为:
另外也可以反相转换: 16进制软件打开BIN看到的16进制内容为:
转换生成文本文件内容:
至于第二种方式不要了 |
|
| 第6楼 willsort | 发表于 2006-07-17 20:41 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re zxcv:
可以使用自带工具debug,但是它要求输入的源16进制数据按字节以空格进行分隔。如:11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF GOTOmsdos兄的意见与此类似。 如果无法实现源串输出的格式控制,就需要在批处理中对串进行重新解析,将源串分解为debug可识别的数据串。这需要使用for/f文本遍历和set的取子串功能,效率相对是比较低的。 另外,debug需要知道转换后BIN的字节长度,而且这个值必须是十六进制值,这又需要用到较复杂的数值计算。 关于txt_bin的命令行方式,可以编写以下的批处理文件t2b,然后以 "t2b TXT BIN" 的方法运行。但是,这个软件应该存在某些问题,在我使用一个不存在的txt文件时,不会提示错误,而会以字符FF持续生成BIN文件。而且它并不会识别0d0a的分割。 最后,提出两点问题: 一、请不要将XP下的“命令提示符”称之为DOS,XP自己都已经不再如此称呼了; 二、你给的数据例子,每行只有30个字符,只能代表15个字节。 [ Last edited by willsort on 2006-7-17 at 20:50 ] |
|
| 第7楼 zh159 | 发表于 2006-07-17 22:55 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
谢谢willsort版主的纠正,95年开始玩DOS,主要还是玩游戏,对于批处理、编程的没认真研究过:P
因为我是用批处理将一整段已转换为16进制字符的数据直接自动写成BIN文件(当然也可以用VBS脚本控制WinHex写入,但这失去了使用命令提示符转换的意义)后再执行其他命令 按GOTOmsdos的方法 文本内容需要处理成:
不知是否理解正确??? 不知是否txt_bin软件的原因,willsort版主的批处理执行后不能自动退出到命令提示符 另:不知txt_bin软件如何实现以下文本(每行最多128字符,可以多行,每行少于128字符会在转换下一行时开头缺少1个字符)
转换成16进制显示的:
而不用分隔符 [ Last edited by zxcv on 2006-7-17 at 23:05 ] |
|
| 第8楼 GOTOmsdos | 发表于 2006-07-18 00:44 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
我没说一定要8个字符分割,是说最大8个要分割
看你的意思,其实,以2个字符分割最合适 这样吧,我现在帮你写一下,很快就搞定(10分钟左右),要纯DOS的也行,要WIN 的提示符的也行。。 |
|
| 第9楼 zh159 | 发表于 2006-07-18 00:49 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
麻烦GOTOmsdos了
主要是在WIN 的提示符里执行 分割最好能以最小分割数为好 我要生成的BIN文件最长是480字节(960个文本) 另:能不能把BIN文件的16进制数据转换成文本文件(根据0D0A位置换行)? [ Last edited by zxcv on 2006-7-18 at 01:30 ] |
|
| 第10楼 GOTOmsdos | 发表于 2006-07-18 01:58 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
解决了
#include <stdio.h> main(int argc, char *argv) { FILE *txt,*bin; //unsigned char buf; unsigned int dig; unsigned char w; unsigned char buf; char stopStr=0; w=0; if((txt=fopen(argv,"rb"))==NULL) { printf("File error : %s\n",argv); return; } if((bin=fopen(argv,"wb"))==NULL) { printf("File error : %s\n",argv); return; } dig=getw(txt); while(!feof(txt)) { memcpy(w,&dig,2); if(w!=0x0d && w!=0x0a && w!=0x0d && w !=0x0a) { buf=(char)strtol(w,&stopStr,16); putc(buf,bin); } dig=getw(txt); } fclose(txt); fclose(bin); /* for(i=0,j=0;j<5120;i+=2,j++) { memcpy(buffer,edit+i,2); //StrbackToPreviousDiskBufEx(buffer,STIF_SUPPORT_HEX,&backToPreviousDiskBuf); backToPreviousDiskBuf=(char)strtol(buffer,&stopString,16); */ } [ Last edited by GOTOmsdos on 2006-7-18 at 01:59 ] |
|
| 第11楼 zh159 | 发表于 2006-07-18 01:59 |
| 金牌会员 发帖 1,467 积分 3,687 | |
Originally posted by GOTOmsdos at 2006-7-18 01:58: ??? |
|
| 第12楼 GOTOmsdos | 发表于 2006-07-18 02:01 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
我重发贴,才可以上传。。你找新帖吧。。
|
|
| 第13楼 GOTOmsdos | 发表于 2006-07-18 14:22 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
另:能不能把BIN文件的16进制数据转换成文本文件(根据0D0A位置换行)?
转成BIN后,已没有回车换行的数据了,不过可以由用户再次指定每隔几个字符插入回车换行。也可没有。 |
|
| 第14楼 zh159 | 发表于 2006-07-18 14:56 |
| 金牌会员 发帖 1,467 积分 3,687 | |
Originally posted by GOTOmsdos at 2006-7-18 14:22: 我已经用for来解决0D0A位置换行了,差把BIN文件16进制数据转换成文本文件了 文本内容:
bat: @echo off [ Last edited by zxcv on 2006-7-18 at 16:01 ] |
|
| 第15楼 GOTOmsdos | 发表于 2006-07-18 15:55 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
刚才才发现,你是要保留回车换行的,我替你去掉了。。
是不是? 现在 我改写程序,马上传上来。。 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |