haijie1223 发表于 2014-12-8 22:48:55

如何读取文件的16进制和ASCII代码[已解决]

本帖最后由 haijie1223 于 2014-12-9 13:09 编辑


如图是用winhex打开的一个rar文件和jpg文件,其中左边显示的是16进制格式,右边是ASCII码格式。
现在问题有两个:
1、如何用AU3读取到文件的这个16进制字符串,如何用AU3读取到文件的ASCII码。
2、如何将文件的16进制转化到ASCII码。

以前只是读取文本文件,倒是没有注意其他格式文件的读取。高手请指点。

afan 发表于 2014-12-9 00:44:18

16文件打开模式即可$h = FileOpen('XXX文件', 16)
$b = FileRead($h)        ;16进制字符串
FileClose($h)
$sA = BinaryToString($b);ANSI

haijie1223 发表于 2014-12-9 07:40:52

回复 2# afan


    真汗死了,16进制这个我没有去对比。
不过ASCII码这个,用CONSOLEWRITE显示不全,是转化不全还是显示不全呢?

austere 发表于 2014-12-9 08:09:49

大神的问题太高深了....只能帮你顶一下~~~

netegg 发表于 2014-12-9 08:16:22

我x,想直接读rar?

haijie1223 发表于 2014-12-9 10:23:00

回复 5# netegg


    不仅仅是RAR,是任何格式的文件。

deaph 发表于 2014-12-9 10:28:03

路过,高深啊!!!

afan 发表于 2014-12-9 12:20:06

回复afan


    真汗死了,16进制这个我没有去对比。
不过ASCII码这个,用CONSOLEWRITE显示不全,是 ...
haijie1223 发表于 2014-12-9 07:40 http://www.autoitx.com/images/common/back.gif


    显示问题,实际数据都是全的,你可以 FileWrite(数据, 'xxx.txt') 看看

haijie1223 发表于 2014-12-9 13:09:10

回复 8# afan


    这是SCITE的bug吗,难道就像dos 的1a?Afan,移帖吧,谢谢!

haijie1223 发表于 2014-12-9 20:13:55

回复 8# afan


    A版,遇到这么一个问题,用copy /b 命令可以将两个文件合并为一个文件。例如jpg和rar文件合并为jpg文件。
然后用winhex找到两个文件的分界点可以将两个文件分开。我就是想用AU3找到这个分界点然后分别写会到各自的文件。$hfile=FileOpen("003.jpg",16) ;003.jpg 是jpg和rar 合并后的文件。
$sBinry=FileRead($hfile)
FileClose($hfile)

$pos=StringInStr($sBinry,"526172211A");526172211A 是rar文件的开头,jpg文件在前。
$sNewstr=StringMid($sBinry,1,$pos)

$hfile=FileOpen("005.jpg",2+16) ;这是打算从合并文件中分出的那个jpg文件
FileWrite($hfile,$sNewstr)
FileClose($hfile)以上的代码并不能实现我的目的。经分析,用string相关的函数时,AU3已经将文件的二进制代码转化为字符型了,再写入到文件时,新文件的二进制代码其实已经变化。
请问A版,这个问题如何解决?

afan 发表于 2014-12-9 20:25:50

回复 10# haijie1223


    有 0x 这两个字符

haijie1223 发表于 2014-12-9 20:35:12

回复 11# afan


    A版,在下愚钝,没有看明白处理方法。还请明示。{:face (396):}

afan 发表于 2014-12-9 20:46:01

这行改改 $sNewstr=StringMid($sBinry,1,$pos - 1) 试试

haijie1223 发表于 2014-12-9 20:59:05

回复 13# afan


    真被我自己打败了~~{:face (394):}
页: [1]
查看完整版本: 如何读取文件的16进制和ASCII代码[已解决]