Jump to content

Recommended Posts

Posted (edited)

Hiho Forum :),

I'm looking for a way to reverse the byte order of a string (for UTF16-LE <> UTF16-BE transformation). I've found the function LCMapString which should imho do the trick, but can't get it to work correctly. Maybe one of the real pros want to take a look :whistle:...

Edit:

Sorry, much too complicated... this already does the trick >_< ...

$in = "test22"
ConsoleWrite(StringToBinary($in, 2) & @CRLF)
ConsoleWrite(StringToBinary($in, 3) & @CRLF)

; LCMapString function ; http://msdn.microsoft.com/en-us/library/dd318700 $in = "test22" $t_in = DllStructCreate("wchar[" & StringLen($in) & "]") DllStructSetData($t_in, 1, $in) ConsoleWrite(StringToBinary(DllStructGetData($t_in, 1)) & @CRLF) $t_out = DllStructCreate("wchar[" & StringLen($in) & "]") ; LCMAP_BYTEREV := 0x800 $iRes = DllCall("kernel32.dll", "int", "LCMapStringW", "uint", 0, "dword", 0x800, "struct*", $t_in, "int", StringLen($in), "ptr", DllStructGetPtr($t_out), "int", StringLen($in)) ConsoleWrite($iRes[0] & @CRLF & $iRes[5] & @CRLF & $iRes[6] & @CRLF) ConsoleWrite(DllStructCreate("wchar[" & $iRes[6] & "]", $iRes[5]) & @CRLF & @CRLF) ConsoleWrite(StringToBinary(DllStructGetData($t_in, 1)) & @CRLF) ConsoleWrite(StringToBinary(DllStructGetData($t_out, 1)) & @CRLF)

Edited by KaFu
Posted

So it's solved? I'm not in a position to run the code.

UDF List:

  Reveal hidden contents

Updated: 22/04/2018

Posted (edited)

Yes it is :), was looking for a new way to find strings in files for SMF. Look at line "For $i = 1 To 4" to see where it's applied.

#include <WinAPI.au3>

Global $__FileSearchContent_iBufferSize = 1024 * 20 ; 20 KB Buffer
Global $__FileSearchContent_tBuffer = DllStructCreate("byte[" & $__FileSearchContent_iBufferSize & "]")

ConsoleWrite(__FileSearchContent(@ScriptFullPath, -1, "Test") & @CRLF)

Func __FileSearchContent($sFile, $iFileSize = -1, $sSearchterm = "")

    ; ConsoleWrite($sSearchterm & @TAB & $sFile & @TAB & $iFileSize & @CRLF)

    Local $hFile = DllCall("kernel32.dll", 'ptr', 'CreateFileW', 'wstr', "\\?\" & $sFile, 'dword', 0x80000000, 'dword', 0, 'ptr', 0, 'dword', 3, 'dword', 0x10000000, 'ptr', 0)
    If (@error) Or ($hFile[0] = Ptr(-1)) Then Return SetError(1, 0, 0)

    If IsKeyword($iFileSize) Or $iFileSize = -1 Then $iFileSize = _WinAPI_GetFileSizeEx($hFile[0])
    If $iFileSize = 0 Then
        DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hFile[0])
        Return SetError(2, 0, 0)
    EndIf

    Local $iBytesToRead, $iFileSizeLeftToRead = $iFileSize, $tBuffer, $aRet

    While 1

        If $iFileSizeLeftToRead < $__FileSearchContent_iBufferSize Then
            $iBytesToRead = $iFileSizeLeftToRead
            $tBuffer = DllStructCreate("byte[" & $iBytesToRead & "]")
        Else
            $iBytesToRead = $__FileSearchContent_iBufferSize
            $tBuffer = $__FileSearchContent_tBuffer
        EndIf

        $aRet = DllCall("kernel32.dll", "bool", "ReadFile", "handle", $hFile[0], "struct*", $tBuffer, "dword", $iBytesToRead, "dword*", 0, "ptr", 0)

        For $i = 1 To 4
            If StringRegExp(BinaryToString(DllStructGetData($tBuffer, 1), $i), $sSearchterm) Then
                DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hFile[0])
                Return 1
            EndIf
        Next

        $iFileSizeLeftToRead -= $aRet[4] ; Bytes read
        If $iFileSizeLeftToRead <= 0 Then ExitLoop ; EOF reached

        DllCall("kernel32.dll", "int", "SetFilePointerEx", "handle", $hFile[0], "int64", -1024, "int64*", 0, "dword", 1) ; roll-back 1024 bytes to address possible overlaps
        $iFileSizeLeftToRead += 1024

    WEnd

    DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hFile[0])

    Return 0

EndFunc   ;==>__FileSearchContent
Edited by KaFu
  • 3 years later...
Posted (edited)

mean is “0x1a2b3c”   to 0x3c2b1a”? use the command “ bitshift”?

MsgBox(0, 0, Hex(BitShift('0x1a2b3c',0)))

Translation: Meaning "0x1a2b3c" to "0x3c2b1a"? Use the command "bitshift"?

Edited by haijie1223
Added translation
  • Moderators
Posted

haijie1223,

Please post in English in future - if necessary do as I did and use a translation site.

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:

  Reveal hidden contents

 

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