Jump to content
HansHenrik

are string variables binary safe?

Recommended Posts

Posted (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 by HansHenrik

Share this post


Link to post
Share on other sites

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


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites

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==
 

Share this post


Link to post
Share on other sites

HansHenrik,

No idea - I do not speak php. But you might like to look at Hex.

M23

 


Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
Posted (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 by HansHenrik

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...