Thinkai's Blog

Autohoutkey|Python|php|aardio|VOIP|IT 爱好者

正在浏览分类 hex

总共找到 3 篇

文件与十六进制显示值互转 Autohotkey 1754

作者为 发表

Autohotkey


这是使用File对象把可见十六进制与文件互转的一个函数。

;文件转十六进制
file2hex(file){
	tmp_file := FileOpen(file, "r")
	while not tmp_file.AtEOF { ;没有到结尾
		tmp_file.RawRead(Data, 1)
	tmp_hex := SubStr("00" . ToBase(Asc(Data),16),-1)
	hex = % hex tmp_hex
}
tmp_file.Close()
return hex
}

;十六进制转文件 比如hex=313233 ,文件内容则为123
hex2file(hex,file){
	tmp_file := FileOpen(file, "w")
	if (Mod(StrLen(hex),2)=1) ;不是双数长度
		return -1
	while hex
	{
		StringLeft, tmp_hex, hex, 2
		StringTrimLeft, hex,hex, 2
		tmp_hex := "0x" tmp_hex
		tmp_file.WriteUChar(tmp_hex)
	}
	tmp_file.Close()
	tmp_file =
}

;进制转换函数
ToBase(n,b){
	return (n < b ? "" : ToBase(n//b,b)) . ((d:=Mod(n,b)) < 10 ? d : Chr(d+55))
}


获取变量的十六进制视图函数两枚 Autohotkey 5270

作者为 发表

Autohotkey

;调用测试示例
a := ClipboardAll ;赋值
;两种方法测试耗时
oldtime := A_TickCount
test1 := HexOut(a) ;方法1
time1 := A_TickCount-oldtime
oldtime := A_TickCount
test2 := HexOut2(a) ;方法2
time2 := A_TickCount-oldtime
;MsgBox, 64, 提示, 方法1:%test1%`n耗时:%time1%ms`n`n方法2:%test2%`n耗时:%time2%ms
MsgBox, 64, 提示, 方法1耗时:%time1%ms`n`n方法2耗时:%time2%ms


HexOut(var,h:=0){
u :=  A_IsUnicode ? 2 : 1 ;Unicode版ahk字符长度是2
hex := {0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"} ;预置0-F的十六进制值
Loop % StrLen(var) ;循环变量的长度/次
{
char := NumGet(var, (A_index-1)*u, "UChar") ;内存读取无格式单字节Asc值
;串接
out .= hex[Floor(char/16)] hex[mod(char,16)] ;十进制转十六进制 Floor向下取整第二位 mod取余数第一位 并分别十六进制
}
if h = 1
	Return "0x" out ;返回0xFF格式
Else
	Return out ;返回FF格式
}

HexOut2(var,h:=0){
u :=  A_IsUnicode ? 2 : 1
Loop % StrLen(var) ;循环变量的长度/次
{
char := NumGet(&var, (A_index-1)*u, "UChar") ;内存读取无格式单字节Asc值
;串接十六进制
SetFormat, IntegerFast, hex
StringReplace, char, char, 0x, , All
SetFormat, IntegerFast, d
out .= StrLen(char)=2 ? char : "0" char
}
if h = 1
	Return "0x" out ;返回0xFF格式
Else
	Return out ;返回FF格式
}


HEX十六进制与文件互转 字符串简单压缩解压 Autohotkey 2592

作者为 发表

Autohotkey

之前写一个gui,需要嵌入图片到ahk代码,但HEX太长,所以有了这么一个压缩脚本

zip(a){
;自定义设置
size = 2 ;多少字节一取样 比如24为bmp 6字节

;完毕
last =
Loop
{
if a =
	{
	if times > 1
		out = % out "[" times "_" last "]"
	Else
		out = % out last
	Break
	}
StringLeft, tmp_var, a, %size%
StringTrimLeft, a, a, %size%
if tmp_var <> %last%
	{
	if last =
		{
		last := tmp_var
		times = 1
		}
	Else
		{
		if times > 1
			{
			out = % out "[" times "_" last "]"
			last := tmp_var
			times = 1
			}
		Else
			{
			out = % out last
			last := tmp_var
			times = 1
			}
		}
	}
Else
	{
	times += 1
	}
}
return %out%
}

unzip(a){
StringSplit, var, a, ]
Loop % var0-1
{
tmp_var = % var%A_Index%
StringSplit, key, tmp_var, [
StringSplit, xx, key2, _
unzip_var =
Loop % xx1
{
unzip_var = % unzip_var xx2
}
out = % out key1 unzip_var
}
out := out var%var0%
Return out
}

file2hex(file){
tmp_file := FileOpen(file, "r")
while not tmp_file.AtEOF {
    tmp_file.RawRead(Data, 1)
	SetFormat, IntegerFast, hex
	tmp_hex := asc(Data)
	StringReplace, tmp_hex, tmp_hex, 0x, , All
	SetFormat, IntegerFast, d
	if StrLen(tmp_hex) = 1
	tmp_hex = 0%tmp_hex%
	hex = % hex tmp_hex
    }
tmp_file.Close()
Return hex
}

hex2file(hex,file){
tmp_file := FileOpen(file, "w")
StringLen, len, hex
loop % len/2
{
if blob =
	break
StringLeft, tmp_hex, blob, 2
StringTrimLeft, blob, blob, 2
tmp_hex := "0x" tmp_hex
tmp_file.WriteUChar(tmp_hex)
}
tmp_file.Close()
tmp_file =
}


a := file2hex("D:\Desktop\no.bmp")
zip := zip(a)
FileAppend, %zip%, zip.txt
b := unzip(zip)
hex2file(b,"out.txt")



友情链接:Autohotkey中文论坛Autohotkey中文帮助Autohotkey官网我的B站直播间如若生涯一场梦博客联系作者免GooglePlay APK下载

 主题设计 • skyfrit.com  Thinkai's Blog | 保留所有权利

49 queries in 0.909 seconds |