Jump to content

are string variables binary safe?


Recommended Posts

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
Link to comment
Share on other sites

  • Moderators

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

 

Link to comment
Share on other sites

  • Moderators

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

 

Link to comment
Share on other sites

@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
Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...