AutoIt字符串变量二进制安全吗?我可以在那里存储二进制数据吗?

问题描述 投票:0回答:1

(即使整个问题都在标题中,我也不会让我没有尸体发帖)

AutoIt字符串变量二进制安全吗?我可以安全地在其中存储二进制数据吗? (不同于Python或JavaScript字符串变量)

string autoit
1个回答
0
投票

测试表明,是的,自动字符串变量是二进制安全的,如果这样做的话

$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
© www.soinside.com 2019 - 2024. All rights reserved.