1 (изменено: ilya20069, 2012-03-12 18:32:02)

Тема: AHK: Hex2Bin

Неверно отображается текст из переменной

HEX = 313233343536 ; HEX-вид строки 123456
;функция Hex2Bin by Laszlo
Hex2Bin(ByRef bin, hex) { ; Hex2Bin(fun,"8B4C24") = MCode(fun,"8B4C24")
   Static fun
   If (fun = "") {
      h:="568b74240c8a164684d2743b578b7c240c538ac2c0e806b109f6e98ac802cac0e104880f8"
       . "a164684d2741a8ac2c0e806b309f6eb80e20f02c20ac188078a16474684d275cd5b5f5ec3"
      VarSetCapacity(fun,StrLen(h)//2)
      Loop % StrLen(h)//2
         NumPut("0x" . SubStr(h,2*A_Index-1,2), fun, A_Index-1, "Char")
   }
   VarSetCapacity(bin,StrLen(hex)//2)
   dllcall(&fun, "uint",&bin, "Str",hex, "cdecl")
}

Hex2Bin(Binary, HEX)  ; преобразование значения из переменной НЕХ в переменную Binary
MsgBox, %Binary%

Скрипт был проверен мной на версиях Basic, _L (ansi), _L (unicode).
Везде в скрипте выводится пустая строка а в информационном окне нормальный текст.

2

Re: AHK: Hex2Bin

Запись в переменную была извне и скрипт не знает, что в переменной что-то появилось, считает её пустой. Нужно, чтобы он её пересмотрел — VarSetCapacity(bin, -1).

HEX = 313233343536 ; HEX-вид строки 123456
;функция Hex2Bin by Laszlo
Hex2Bin(ByRef bin, hex) { ; Hex2Bin(fun,"8B4C24") = MCode(fun,"8B4C24")
   Static fun
   If (fun = "") {
      h:="568b74240c8a164684d2743b578b7c240c538ac2c0e806b109f6e98ac802cac0e104880f8"
       . "a164684d2741a8ac2c0e806b309f6eb80e20f02c20ac188078a16474684d275cd5b5f5ec3"
      VarSetCapacity(fun,StrLen(h)//2)
      Loop % StrLen(h)//2
         NumPut("0x" . SubStr(h,2*A_Index-1,2), fun, A_Index-1, "Char")
   }
   VarSetCapacity(bin,StrLen(hex)//2)
   dllcall(&fun, "uint",&bin, "Str",hex, "cdecl")
   VarSetCapacity(bin, -1)
}
 
Hex2Bin(Binary, HEX)  ; преобразование значения из переменной НЕХ в переменную Binary
MsgBox, %Binary%

3

Re: AHK: Hex2Bin

Благодарю, три дня мучался

4

Re: AHK: Hex2Bin

MsgBox, % Bin2Hex(313233343536)

Bin2Hex(HEX)
{
   Loop, % StrLen(HEX)//2
      bin.=Chr("0x"SubStr(HEX, 2*A_Index-1, 2))
   Return, bin
}