Ascii zeichenweise einlesen ( schleife )

  • Hey Leute ich habe da ein kleines problem wo ich nicht weiter komme. Bin noch ziemlich neu in sachen Autoit unterwegs aber finde es jetzt schon sehr interessant und gut!

    Und zwar will ich eine schleife bauen die mir die Ascii zeichenweise einliest und später ausgibt...

    in delphi würde ich es so machen:

    for i:= 1 to Length(text) do
    begin
    Var1 := Ord(text[i]);
    end;

    Aber wie mach ich das in autoit weil sowas änliches wie Ord gibt es irgendwie nicht in autoit hab ich nicht gefunden. ASC gibt mir nur ein zeichen zurück. Ich will aber jedes ites zeichen einlesen und als hex wert haben. Schleifen durchlauf 1 Var1 := zb == 41 was für A in ASCII steht. wie kann ich das anstellen gibt es da eine function ? die schleife und alles andere ist kein problem nur die sache mit dem einlesen des strings in hexzeichen und zwar zeichenweise.....

    freu mich auf antworten.

    MfG

    MR! ?(

  • Hmmm also mein code sieht zurzeit so aus....

    Das haut nur irgendwie nicht so ganz hin^^

    MfG

  • angepasst
    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("", 237, 188, 192, 124)
    $Input1 = GUICtrlCreateInput("Hier zu wandelnden Text reinschreiben", 32, 24, 153, 21)
    $Input2 = GUICtrlCreateInput("Hier wird das Ergebnis stehen", 8, 64, 201, 21)
    $Button1 = GUICtrlCreateButton("Button1", 80, 96, 105, 49)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $Button1
    $s_String = GUICtrlRead($Input1)
    $s_HexString = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $i In StringToASCIIArray($s_String)
    $s_HexString &= Hex($i, 2)
    Next
    GUICtrlSetData($Input2, $s_HexString)

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

    Wenn du die Buchstaben nicht einzeln behandeln willst sondern den String nur in eine Hex-Zahlenfolge umwandeln willst kannst du auch stattdessen StringToBinary() nehmen:

    'StringToBinary()
    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("", 237, 188, 192, 124)
    $Input1 = GUICtrlCreateInput("Hier zu wandelnden Text reinschreiben", 32, 24, 153, 21)
    $Input2 = GUICtrlCreateInput("Hier wird das Ergebnis stehen", 8, 64, 201, 21)
    $Button1 = GUICtrlCreateButton("Button1", 80, 96, 105, 49)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $Button1
    GUICtrlSetData($Input2, StringTrimLeft(StringToBinary(GUICtrlRead($Input1)), 2))

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]
  • Fast ist es das schon habe nur leider noch ein problem. Er gibt mir zwar die Ascii btw hex zeichen aber alle komplett für die eingabe also den eingegeben string. Ich möchte aber immer nur 1 haben dh erster schleifen durchlauf string = AB variable hexchar = 41 und dann möchte ich damit rechnen schleifen durchlauf 2 variable hexchar = 42 fürs char B und so weiter. Und wie kann ich die schleife length(String) durchlaufen lassen.

    MfG :)

  • Naja die Schleife ist ja gerade das was zeichenweise abläuft.
    In jedem Schleifendurchlauf steht in der Variable $i der derzeitige Dezimalwert des aktuellen Zeichens (mit der Funktion Hex() noch wandeln).
    Wenn du also mit den einzelnen Zeichenwerten rechnen willst gehört deine Rechnung in diese Schleife wo du mit der Variable $i (hier halt so genannt - kannst du aber auch anders nennen) arbeiten kannst.

  • Moin,

    [autoit]

    StringToBinary('ABCDEFGHI'); = 0x414243444546474849

    [/autoit]

    Wenn du jetzt noch mit Stringtrimleft das 0x abhackst, hast du deinen String.
    Dann hast du '41' für 'A' und '42' für 'B' usw.

    oder

    [autoit]

    Local $sString = 'ABC' ; 656667
    Local $sRet

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To StringLen($sString) Step 1
    $sRet &= Asc(StringMid($sString, $i, 1))
    Next

    [/autoit]

    Das ist dann Zeichenweise, aber da wird wohl eine andere Kodierung genutzt.

    Edit: Man bin ich blöd heute^^
    Asc gibt Dezimalzahlen aus. Deshalb die 65 für A^^

    [autoit]

    Local $sString = 'ABC'
    Local $sRet

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To StringLen($sString) Step 1
    $sRet &= Hex(Asc(StringMid($sString, $i, 1)),2)
    Next

    [/autoit]

    So gehts auch !

    Eine Kombination aus beidem ist zwar vergleichsweise Langsam, tut aber das was du willst.

    [autoit]

    Local $sString = 'ABC' ;414243
    Local $sRet

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To StringLen($sString) Step 1
    $sRet &= StringRight(StringToBinary(StringMid($sString, $i, 1)), 2)
    Next

    [/autoit]

    lg
    Mars(i)

  • Ich auch nicht^^
    Ich verstehe das Problem grade nicht, deshalb habe ich mal einige Lösungsvorschläge gezeigt.
    Vllt gefällt ihm ja einer dieser...^^

    lg
    Mars(i)

  • Danke Leute. Aber das ist noch nicht ganz was ich brauch. Ich will nur von der eingabe jedes zeichen einzelt behandeln dh. var := eingabe as Hex zb 41 für A dann var = var + 4 und das wieder als string ausgaben. Bei euren code wird ja der komplette eingegebene string conventiert. Auch soll die Schleife length string durchlaufen beim ersten durchlauf der schleife nimmt er aus dem string das char 1 2ter durchlauf string char 2...usw..

    MfG

  • Ich will nur von der eingabe jedes zeichen einzelt behandeln [...]
    beim ersten durchlauf der schleife nimmt er aus dem string das char 1 2ter durchlauf string char 2...usw..

    Dann wiederhole ich mich: $i ist in meinem oberen Beispiel innerhalb der Schleife der einzelne Buchstabe. Die Behandlung einzelner Buchstaben musst du also innerhalb der Schleife durchführen.
    Vielleicht nochmal zur Verdeutlichung das wirklich innerhalb der Schleife nur einzelne Buchstaben behandelt werden statt dem Gesamtstring:

    [autoit]

    Global $s_String = "Dies ist mein Teststring"

    [/autoit][autoit][/autoit][autoit]

    For $i In StringToASCIIArray($s_String)
    MsgBox(0,"", "Buchstabe als Hex: " & Hex($i, 2))
    Next

    [/autoit]

    Oder alternativ wenn du die Position des Buchstabens auch mit haben möchtest:

    Spoiler anzeigen
    [autoit]

    Global $s_String = "Dies ist mein Teststring"

    [/autoit] [autoit][/autoit] [autoit]

    Global $a_Chars = StringToASCIIArray($s_String)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($a_Chars) - 1
    MsgBox(0,"", $i + 1 & ". Buchstabe als Hex: " & Hex($a_Chars[$i], 2))
    Next

    [/autoit]