HansHenrik Posted May 29, 2020 Posted May 29, 2020 (edited) can i safely store binary data there? results of this test suggest the answer is "no" $test=""; for $i = 0 To 255 $test = $test & Chr($i); Next ConsoleWrite( $test ); because it writes 0 bytes to stdout, i would have expected it to write 256 bytes to stdout still would like some answers (and if the answer is "no", then how should i manipulate binary data in AutoIt? ) edit: interestingly, if i change it to for $i = 1 To 255 , then it writes 255 bytes to stdout, so it seems something has a problem with null-bytes specifically (haven't verified that those 255 characters are what they're supposed to be, though) Edited May 29, 2020 by HansHenrik
Moderators Melba23 Posted May 29, 2020 Moderators Posted May 29, 2020 HansHenrik, The first element of the string is Chr(0) which AutoIt interprets (along with much else) as EOF and so prints nothing. Next question? M23 Skysnake 1 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
HansHenrik Posted May 29, 2020 Author Posted May 29, 2020 ok, how do you write binary data to stdout then? how would one do this in AutoIt instead of PHP? $ php -r 'echo chr(0); ' | base64 AA==
Moderators Melba23 Posted May 29, 2020 Moderators Posted May 29, 2020 HansHenrik, No idea - I do not speak php. But you might like to look at Hex. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
argumentum Posted May 29, 2020 Posted May 29, 2020 @HansHenrik, you are piping to base64. There is base64 functions if you look in the forum. Look around, ...you may find to have no new questions to formulate Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
HansHenrik Posted May 29, 2020 Author Posted May 29, 2020 (edited) @argumentum doesn't matter what i pipe it to (and i don't intend to pipe it to base64, i actually intend to pipe it to a php-cli parent), i just want to know how to write binary data to stdout ( for @Melba23 it's not really a PHP thing, most languages can do it (for example in C++ std::cout << std::string("\x00",1); ) but i figured it out: ; 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 and it seems AutoIt string variables are indeed binary safe, now doing $test=""; for $i = 0 To 255 $test = $test & Chr($i); Next ConsoleWriteBinarySafe($test); does indeed write every byte from 0 to 255 to stdout Edited May 29, 2020 by HansHenrik Skysnake 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now