тестирование предполагает, что да, строковые переменные autoit безопасны для двоичного кода, если вы сделаете
$test="";
for $i = 0 To 255
$test = $test & Chr($i);
Next
ConsoleWrite(StringLen($test));
, строка будет содержать каждый байт, однако некоторые встроенные функции не являются двоичными безопасными, например ConsoleWrite () остановится запись в первый нулевой байт, поэтому добавление ConsoleWrite($test);
ничего не напечатает. Я попросил исправить это здесь https://www.autoitscript.com/trac/autoit/ticket/3764, но пока вот безопасная для двоичного кода реализация ConsoleWrite:
; binary safe ConsoleWrite() ( AutoIt's builtin ConsoleWrite() is not binary safe, it chokes if you try to write a null byte to stdout)
Func ConsoleWriteBinarySafe( Const ByRef $str)
Local $bytesWritten=0;
Local $stdoutHandle=_WinAPI_GetStdHandle(1);
Local $tBuffer = DllStructCreate("byte[" & StringLen($str) & "]");
DllStructSetData($tBuffer, 1, $str);
_WinAPI_WriteFile ( $stdoutHandle, $tBuffer, StringLen($str), $bytesWritten);
return $bytesWritten;
EndFunc