rootx

[SOLVED] _HexToString or BinaryToString ?

8 posts in this topic

#1 ·  Posted (edited)

There is a way to have a clean string value without any SOH STX etc... Values

 

#include <FileConstants.au3>
#include <String.au3>
#include <WinAPI.au3>
#include <Array.au3>
#include <File.au3>

$file = _FileListToArrayRec(@ScriptDir,"*.otf",1,1,0,2)

For $x = 1 to UBound($file)-1
    ;ConsoleWrite(_ReadOffSet($ISO[$x],0x000000,12))
    ConsoleWrite(_HexToString(StringStripWS(_ReadOffSet($file[$x],0x000000,16), 8))&@CRLF)
    $String = StringReplace(BinaryToString(_ReadOffSet($file[$x],0x000000,16)), Chr(0), "")
    FileWrite(@ScriptDir&"\file.txt",$String&@CRLF)
    FileWrite(@ScriptDir&"\file2.txt",_HexToString(StringStripWS(_ReadOffSet($file[$x],0x000000,16), 8))&@CRLF)
Next


Func _ReadOffSet($sFilePath,$iOffset,$iLen=1)
    Local $sRet=""
    Local $hFile=FileOpen($sFilePath,$FO_BINARY)
    FileSetPos($hFile,$iOffset,$FILE_BEGIN)
    $sRet=FileRead($hFile,$iLen)
    FileClose($hFile)
    Return $sRet
EndFunc

 

Edited by rootx

Share this post


Link to post
Share on other sites



#2 ·  Posted

Your question is vague at best. What are those .OTF files, are they OTF fonts? If yes, lookup he OTF file format to see that your blind reading of 16 bytes at head of file is off the mark.

Else post an example of your OTF file and tell us which string you want to read. Hint: use a hex file editor to inspect it.


This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

#3 ·  Posted

I need only US-ASCII Printable. THX

PS: Do you know a regular expression to do it, without having to create an array with the unwanted Char, and use a loop to clean my string?

Share this post


Link to post
Share on other sites

#4 ·  Posted

Please answer first all the points raised.


This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

$String = StringReplace(BinaryToString(_ReadOffSet($file[$x],0x000000,10)), Chr(0), "")

I'm sorry I writted a wrong length.... is 10 not 16 but the question is remove non printable char.

My goal is write OTTO € PCFF and Not .... OTTO nul nul nul € nul etc....

THX.

Cattura.JPG

Edited by rootx

Share this post


Link to post
Share on other sites

#6 ·  Posted

Does your StringReplace not work in that line? It seems like it would to me.


UHJvZmVzc2lvbmFsIENvbXB1dGVyZXI=

Share this post


Link to post
Share on other sites

#7 ·  Posted

You can do that (quick'n dirty):

Local $hOTF = FileOpen("SourceCodePro-Regular.otf", 16)
Local $bOTF = FileRead($hOTF)
FileClose($hOTF)
Local $sOTF = StringRegExpReplace(BinaryToString($bOTF), "[[:cntrl:]]", "")
ConsoleWrite($sOTF)

but it doesn't make you any good.

  • First, there are pure binary areas containing offsets, adresses, flags, binary data, some of which will get interpreted as printable characters.
  • Second, there are portions of text encoded in UTF16; depending on the language used you can as well read garbage there.
  • Lastly, this brute-forcing read of everything in [0x20, 0x7E] U [0x80, 0xFF] completely ignores the file structure, having headers, optional areas, glyph tables as compressed Postscript and other zones.

If you want to retrieve significant information properly, you need to dissect the file format according to OTF specifications, in order to read just the valid area(s) of interest under the correct format and encoding. Anything else is just plain wrong.

1 person likes this

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Share this post


Link to post
Share on other sites

#8 ·  Posted

many thanks for your explanation. :lmao:

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

  • Similar Content

    • carl1905
      By carl1905
      Hi. I'm looking forward to adding another language option for BinaryToString.
      Basically, it only supports ANSI, UTF-8,  UTF16 Little Endian, and  UTF16 Big Endian. https://www.autoitscript.com/wiki/BinaryToString
      Is there any way to adding Shift-JIS(Japanese, CP 932) and EUC-KR(Korean, CP 949)?
    • xiantez
      By xiantez
      Hello AutoIT community. 
      I am attempting to make a script that will login to my bank account and retrieve one of my account balances and display it in a MsgBox, however it am having some difficulty getting the correct value.... The MsgBox keep displaying a value of "0" instead of the actual string in between the source code I'm looking for.... Any help would be greatly appreciated!
      $readtext = InetRead("https://www.xxxbanksitexxx.com/das/cgi-bin/session.cgi?screenid=SIGNON_PORTAL_PAUSE&amp;LOB=CONS",1)
      $source = BinaryToString($readtext)
      $text =  _StringBetween($source,'CHECKING XXXXXXXXXX&nbsp;', ' "> ')

      MsgBox(0,"balance",$text)     ;This keeps returning a value of "0"

              Case $GUI_EVENT_CLOSE
                 GUIDelete($Form1)
                  ExitLoop
               Case $Button2
                  GUIDelete($Form1)
                  ExitLoop
          EndSwitch
      WEnd
       
       
    • gooker
      By gooker
      Hi :
      My os is ubuntu 14.04 ,wine version is 1.7.
      The problem is as follows:
      When I use BinaryToString example , in the help file (https://www.autoitscript.com/autoit3/docs/functions/BinaryToString.htm), running under the win7 is ok.
      When I was running in wine, "你好"  change to  "??".

      The binary code(0x4865...) is correct, the result is wrong, I think the problem is the BinaryToString function itself.
      Whether there is a solution,
      If someone can help me ,thank you!
       
    • Tardis
      By Tardis
      Hi all Im still New To Autoit and would realy like some help ...

      I have gone through some examples and other code on the forum but now I am stuck
      see comments on what I want to do .
      #RequireAdmin #include <IE.au3> #include <MsgBoxConstants.au3> #include <File.au3> #include <String.au3> #include <Array.au3> Global $oIE = _IECreate("https://www.harryhomers.org/et/forum/viewtopic.php?f=89&t=4309", 0, 0, 1, 0) Global $oElements = _IETagNameAllGetCollection($oIE) Global $oID = _IEGetObjById($oIE, "p41827") Global $ListArray[1] #cs ; the list I want to get is 1 - 20 max 30 and there names . The DIV ID is p41827 <div class="content">HarryHomers can be found at 85.236.100.205:<span style="font-weight: bold">27960</span><br /><br /><ul>HH Bot Multi campaign **<br /><br />1. NAME 1<br />2. NAME 2<br />3. NAME 3<br />4. NAME 4<br /> 5. NAME 5<br />6. NAME 6<br />7. NAME 7<br />8. NAME 8<br />9. NAME 9<br />10. NAME 10<br />11. NAME 11<br />12. NAME 12<br />13. NAME 13<br />14. NAME 14<br /> 15. NAME 15<br />16. NAME 16<br />17. NAME 17<br />18. NAME 18<br />19. NAME 19<br />20. NAME 20<br /> </ul> #ce For $oElement in $oElements     Local $_sSourceTAG = $oElement.tagname     Local $_sSourceTEXT = $oElement.innerText     Local $_sSourceID = $oElement.id     Local $_sSourceHTML = $oElement.innerhtml     If $_sSourceID = "p41827" Then ;Test message box                 MsgBox($MB_SYSTEMMODAL, "MY TAG ID", "Innertext: "  & $_sSourceTAG & @CRLF & "id: " & $_sSourceID & @CRLF & "innerText: " & $_sSourceTEXT)                 MsgBox($MB_SYSTEMMODAL, "MY HTML", "Innerhtml: "  & "id: " & $_sSourceID & $_sSourceHTML)         $oData = _IEPropertyGet($oIE, "strong")         $Check = StringRight($oData, 11)         If $Check = "ohnDory</A>" Then ;Test message box             MsgBox($MB_SYSTEMMODAL, "SEARCH FOUND", "The characters are: " & $Check )             $ArraySplit1 = StringSplit($oData, ".")             For $ArrayItem in $ArraySplit1                 $ArrayItem = StringSplit($ArrayItem, "<BR>", 1)                 If $ArrayItem[0] > 1 Then                     If $ArrayItem[2] > 0 Then                         $ArrayItem[1] = StringStripWS($ArrayItem[1], 3)                         _ArrayAdd($ListArray, $ArrayItem[1])                     EndIf                 EndIf                 If StringInStr($ArrayItem[1], "</UL>") Then                     $POS = StringInStr($ArrayItem[1], "</UL>") - 1                     $String = StringLeft($ArrayItem[1], $POS)                     $String = StringStripWS($String, 3)                     _ArrayAdd($ListArray, $String)                 EndIf             Next         Else ; Not correct so ignore         MsgBox($MB_SYSTEMMODAL, "NOT FOUND", "The characters are: " & $Check )         EndIf     EndIf     Next     _ArrayDisplay($ListArray)     _ArrayReverse($ListArray)     _ArrayPop($ListArray)     _ArrayReverse($ListArray)     _ArrayDisplay($ListArray, "Map List Array Final View")     sleep(2500) _IEQuit($oIE) #cs ; note the html (map names) does change once a month ; save txt file #ce ;_FileWriteLog(@TempDir & "\list.txt", $ListArray)