безопасны ли двоичные строковые переменные AutoIt? могу ли я хранить там двоичные данные? - PullRequest
0 голосов
/ 29 мая 2020

(SO не позволит мне публиковать сообщения без тела, даже если весь вопрос находится в заголовке)

безопасны ли строковые переменные AutoIt в двоичном виде? могу ли я безопасно хранить в них двоичные данные? (в отличие, скажем, от Python или JavaScript строковых переменных)

1 Ответ

0 голосов
/ 30 мая 2020

тестирование предполагает, что да, строковые переменные 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...