Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Zahl in Ascii Zeichenfolge umwandeln
daywalker0086 - Di 12.06.18 17:39
Titel: Zahl in Ascii Zeichenfolge umwandeln
Hallo Freunde des Orakels,
ich wollte mal fragen wie ich am besten eine Zahl in ihre Ascii Repräsentation umwandle.
Folgendes soll erreicht werden:
zahl: integer;
ascii: string;
ascii := zahl -->
das heißt ich habe als Zahl 31.
Jetzt soll dies umgewandelt werden zu ascii 3331
oder 1 zu 31
Die Zahlen werden nicht größer als zweistellig als 99 zu 3939
Hat da jemand eine schnelle Lösung?
Grüße Christian
ub60 - Di 12.06.18 18:40
Eventuell so, wobei SZahl schon die als String umgewandelte Zahl ist:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var SZahl, Ascii: String; i: Integer; begin SZahl:=EditZahl.Text; Ascii:=''; for i:=1 to Length(SZahl) do Ascii:=Ascii+IntToHex(Ord(SZahl[i]), 2); EditAscii.Text:=Ascii; end; |
ub60
daywalker0086 - Do 14.06.18 18:23
Dankeschön ub60,
läuft :D
GuaAck - Sa 16.06.18 22:00
Hallo,
warum nicht einfach SZahl:=inttostr(zahl)?
Habe ich da eine feinheit übersehen?
Gruß GuaAck
Narses - Sa 16.06.18 23:07
Moin!
Ich verstehe den Aufwand nicht, reden wir nicht von BinToHex() und HexToBin()? Hab grad kein Delphi zur Hand, aber ich könnte schwören sowas schonmal benutzt zu haben... :gruebel:
cu
Narses
jaenicke - Sa 16.06.18 23:38
BinToHex ist das richtige, ja.
ub60 - So 17.06.18 11:10
@Narses:
Meintest Du so was:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var SZahl, Ascii: String; begin SZahl:=EditZahl.Text; SetLength(Ascii, 2*Length(SZahl)); BinToHex(PChar(SZahl), PChar(Ascii), Length(SZahl)); EditAscii.Text:=Ascii; end; |
Bin mir gerade bei der Syntax nicht sicher, aber es funktioniert :P .
ub60
GuaAck - So 17.06.18 11:37
Hallo alle,
ich habe mal ein kleines Testprogramm gemacht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| PROCEDURE TForm1.Button1Click(Sender: TObject); VAR f: textfile; s: STRING; i: integer; p: ARRAY[0..1] OF char; BEGIN i := 31; assignfile(f, 'Test.txt'); rewrite(f); s := inttostr(i); writeln(f, 'inttostr:', s); s := inttohex(i, 2); writeln(f, 'inttohex:', s); bintohex(pchar(@i), pchar(@p), 1); writeln(f, 'bintohex:', p); closefile(f); END; |
Dann sehe ich mir die Datei "Test.txt" mit einem HEX-Viewer an und sehe:
inttostr:31
inttohex:1F
bintohex:1F
(HEX-Dump auch im Anhang)
Demnach gibt doch nur inttostr wie gewünscht die 3331 zurück.
Gruß GuaAck
jaenicke - So 17.06.18 16:30
Es ging um einen String mit dem Inhalt 31. Sprich deine Variable s. Schreibst du die mit BinToHex weg, kommt das richtige heraus.
GuaAck - So 17.06.18 23:14
Sorry Jaenicke,
in der Ausgangsfrage stand:
Zitat: |
zahl: integer;
ascii: string;
ascii := zahl -->
das heißt ich habe als Zahl 31.
Jetzt soll dies umgewandelt werden zu ascii 3331
|
Die 31 ist als Integer gemeint, nicht als String. Ich bleibe bei meinem Votum für inttostr.
Gruß
GuaAck
Narses - So 17.06.18 23:20
Moin!
Aber in dem anderen Thread des TE geht´s genau darum: einen binären Inhalt hexstring-encoded zu senden, also macht es durchaus Sinn. ;)
cu
Narses
Delete - Mo 18.06.18 08:47
- Nachträglich durch die Entwickler-Ecke gelöscht -
Narses - Mo 18.06.18 12:30
Moin!
Frühlingsrolle hat folgendes geschrieben : |
Das sollte beide Parteien glücklich stimmen: |
Wenn schon zur Wiederverwendung formalisiert, dann solltest du unbedingt auf die generischen Typen verzichten und z.B. AnsiString erzwingen. :idea: Das knallt sonst in Unicode-Delphi-Versionen. :?
cu
Narses
Delete - Di 19.06.18 02:33
- Nachträglich durch die Entwickler-Ecke gelöscht -
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!