吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1666|回复: 5
收起左侧

[其他原创] [AutoHotKey]艰难自学之:将2进制文件读为16进制字串

[复制链接]
laozhhaiJohn 发表于 2021-3-20 17:36
[AutoHotKey]艰难自学之:将2进制文件读为16进制字串,并计算该字串和源文件MD5值
一、前言:
    AutoHotKey之所以学的艰难,一是因为小众,导致用的人少,交流困难;资料少,学习困难。二是因为它是英文软件,官方的资料大多都是英文的,对于我们还有一层学习障碍;同时由于第一个小众原因,国内相应的翻译资料也少。三是同类的国内某些软件抢占了市场,用户相对较多;同时,很多用户使用易语言和易的插件,也能完成一些AutoHotKey的任务。四是AutoHotKey自身语言设计上的随性,语言设定对程序员而言太自由,反而成为初学者的噩梦。五是AutoHotKey的官方帮助文件比较粗略不详,又没有权威和详细教程,导致学起来很困难,需要用户一次次的实验从而避雷跳坑。

二、本次学习目标:
    将2进制文件转16进制字串并格式化长行短写。同时,计算该串和原文件的MD5值存txt备用。

16制串制式文本写为txt文件。
    这是我写的一个小项目当中的一个模块工具。

三、直接上代码:

[Java] 纯文本查看 复制代码
/*┌=======================文件信息========================= 
 *||⑴程 序 员:  Laoz-CTCTJCU 
 *||⑵程序名称:   
 *||⑵版本编号:  v0.01 
 *||⑶创建时间:  2021/3/18 下午6:18:36 
 *||⑷当前编写:  Laoz-CTCTJCU 
 *||⑸修改时间:  2021/3/20 下午3:05:05 
 *||⑹描述说明:  我的工具程序之1--将2进制文件转16进制字串并格式化长行短写,
 *||            同时,计算该串和原文件的MD5值存txt备用.16制串制式文本写为txt文件.
 *||  修 饰 键:  ^==ctrl,  !==alt,  +==shift,  #==win 
 *└======================================================== 
*/ 
#SingleInstance, Force
SendMode Input
SetWorkingDir, %A_ScriptDir%
#Include lib\lib.ahk  ;包含入主函数库文件

FileSelectFile, 图像文件, , , 请选择图片, 图片文件(*.jpg; *.png; *.bmp) ;选择文件
if (图像文件 = ""  )  ;如果没有打开文件,暨变量为空则
    {
        MsgBox, 0, 错误, 您未选择任何文件
        Reload   ;重启脚本
    }

;;;;;1、将图片文件读为16进制字串并写入txt文件保存备用
16进制文本 := file2hex(图像文件) ;调用库函数将图片读为16进制文本串
输出文本文件 := A_Temp . "\akpngbmpjpgpcx2hextext.txt"  ;将在系统临时目录生成文件
FileDelete, % 输出文本文件  ;创建一个空文件,或者若该文件有内容则清空内容
FileAppend, % 16进制文本, % 输出文本文件  ;将该16进制文本写入文本文件,两个变量都要加%,也是坑
Run, % 输出文本文件  ;打开这个文件看看
;注意,记事本打开这个文件,如果没有设置自动换行的化,会是一个长长长长长长长长长长长的行
;勾选记事本菜单-格式-自动换行之后,长行会随着记事本窗口大小进行自动的换行显示.

;;;;;2、计算该16进制字串和原始图片文件的MD5值存为txt文本文件备用
16进制文本MD5值 := MD5(16进制文本)  ;调用函数计算md5值
Clipboard := 16进制文本MD5值 ;运算结果放到剪贴板,这句纯粹为了方便进行粘贴操作
运算结果0 := 16进制文本MD5值  ;运算结果赋值给变量
原始图片文件MD5值 := FileMD5( "s:\bb.png", 4) ;调用函数计算文件的md5值
Clipboard := 原始图片文件MD5值
运算结果1 := 原始图片文件MD5值
输出文本文件2 := A_Temp . "\akpngbmpjpgpcx2md5filemd5.txt"  ;A_Temp内部变量代表系统临时文件夹
md5内容写入文本 := "字符串值:`n" . 运算结果0 . "`n" . "文件值:`n" . 运算结果1
FileDelete, % 输出文本文件2  ;创建一个空文件,或者若该文件有内容则清空内容
FileAppend, % md5内容写入文本, % 输出文本文件2  ;将该16进制文本写入文本文件
;这里注意:上面一句中两个变量都要加%,都要加啊! 这也是坑
Run, % 输出文本文件2

;;;;;3、将该字串或txt文件格式化为长行短写便于编程界面查看的格式,也就是加硬回车断行
;;;;;3-1、将该字串格式化为长行短写的格式后,写入txt文件保存
;16进制文本 := "123456789abcdef"  ;测试下面语句用临时变量
字串长度Length := StrLen(16进制文本)  ;计算16进制字串长度,应该是文件字节数的2倍
输出文本文件3 := A_Temp . "\akpnbmjppc2hex2formattext.txt"
FileDelete, % 输出文本文件3  ;创建一个空文件,或者若该文件有内容则清空内容

当前截取内容 := "( Join LTrim  `;重要参数,必须保留`n`""" ;
;AutoHotKey中,转义符为“ ` ”,暨esc下面的键.
;特别注意,上面一句,正文中的";"号,需用"`"转义. 之后用"`n"表示分行
;上一句最后转义“ `"" ”内容,表示转义为“ " ”号.因为换行后下一行第一个字符为",哈哈
;AutoHotKey用两个双引号来表示一个原义的双引号
;见手册中章节:#EscapeChar (和转义序列的说明),该命令V2已经启用,可搜索转义序列
FileAppend, % 当前截取内容, % 输出文本文件3  ;将前导的格式先写入文本文件

一行字符数 := 80  ;按照80个字符一行
循环次数 := Ceil(字串长度Length / 一行字符数) ;计算要截取次数并向上取整

While, A_Index <= 循环次数  ;循环截取该16进制字串
    {
        截取点 := ((A_Index -1) * 一行字符数) + 1
        If (A_Index < 循环次数)  ;非最后一行都加分行符号
            {
                当前80字符 := SubStr(16进制文本, 截取点, 一行字符数) . "`n"
            }
            Else  ;最后一行则不加分行符号,令行处理
            {
                当前80字符 := SubStr(16进制文本, 截取点, 一行字符数)
                当前80字符 := 当前80字符 . "`""`n)" ;将最后一行字串加收尾的字符内容
            }
        FileAppend, % 当前80字符, % 输出文本文件3 ;追加被截取的80字符
    }

Run, % 输出文本文件3
Pause
;;;;;3-2、将txt文件读入,之后格式化为长行短写的脚本适用格式后,写到另外txt文件
;;这个就不写了,累啊,有3-1的语句段就可以啦



屏幕截图 2021-03-20 173229---.gif



免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
Codeman + 1 + 1 等你学成之日就是大佬级别
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Cashion 发表于 2021-3-20 18:28
可不,AutoHotKey还能做输入法,怎么能算小众呢
宜城小站 发表于 2021-3-20 18:30
bwuaich 发表于 2021-3-20 19:33
头像被屏蔽
xzl2021 发表于 2021-3-20 19:38
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| laozhhaiJohn 发表于 2021-3-20 22:03
xzl2021 发表于 2021-3-20 19:38
你这变量名都是中文,看着真糟心。

嗯,我英文水平不高,所以用中文做变量名,自己看着好懂一些。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表