(即使整个问题都在标题中,我也不会让我没有尸体发帖)
AutoIt字符串变量二进制安全吗?我可以安全地在其中存储二进制数据吗? (不同于Python或JavaScript字符串变量)
测试表明,是的,自动字符串变量是二进制安全的,如果这样做的话
$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