Autor Beitrag
daywalker0086
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230


Delphi 2005 Architect
BeitragVerfasst: Di 12.06.18 17:39 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 672
Erhaltene Danke: 81



BeitragVerfasst: Di 12.06.18 18:40 
Eventuell so, wobei SZahl schon die als String umgewandelte Zahl ist:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 230


Delphi 2005 Architect
BeitragVerfasst: Do 14.06.18 18:23 
Dankeschön ub60,
läuft :D
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 281
Erhaltene Danke: 25

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Sa 16.06.18 22:00 
Hallo,

warum nicht einfach SZahl:=inttostr(zahl)?

Habe ich da eine feinheit übersehen?

Gruß GuaAck
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18599
Erhaltene Danke: 1596

W10 x64 (Chrome, IE11)
Delphi 10.1 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 16.06.18 22:32 
user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
warum nicht einfach SZahl:=inttostr(zahl)?

Habe ich da eine feinheit übersehen?
Ja. ;-)
Sieh dir mal das Beispiel an. Aus der Zahl 31 soll 3331 werden, sprich Asciizeichen 3 entspricht hexadezimal 33, Asciizeichen 1 wiederum 31. Daher kommt dann 3331 heraus.

_________________
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 9828
Erhaltene Danke: 1032

W2k .. W7pro
TP3 .. D7pro .. D10.1
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18599
Erhaltene Danke: 1596

W10 x64 (Chrome, IE11)
Delphi 10.1 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 16.06.18 23:38 
BinToHex ist das richtige, ja.

_________________
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 672
Erhaltene Danke: 81



BeitragVerfasst: Gestern um 11:10 
@Narses:

Meintest Du so was:

ausblenden 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

Für diesen Beitrag haben gedankt: Narses
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 281
Erhaltene Danke: 25

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Gestern um 11:37 
Hallo alle,

ich habe mal ein kleines Testprogramm gemacht:
ausblenden 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..1OF 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

Dump

(HEX-Dump auch im Anhang)

Demnach gibt doch nur inttostr wie gewünscht die 3331 zurück.

Gruß GuaAck
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 18599
Erhaltene Danke: 1596

W10 x64 (Chrome, IE11)
Delphi 10.1 Ent, Oxygene, C# (VS 2015), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Gestern um 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.

_________________
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 281
Erhaltene Danke: 25

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Gestern um 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 9828
Erhaltene Danke: 1032

W2k .. W7pro
TP3 .. D7pro .. D10.1
BeitragVerfasst: Gestern um 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2003
Erhaltene Danke: 366

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Heute um 08:47 
Das sollte beide Parteien glücklich stimmen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function BytesToHex(const s: string): stringoverload;
var
  hex: array of Char;
begin
  SetLength(hex, Length(s) * 2);
  BinToHex(PChar(s), PChar(hex), Length(s));
  result := string(hex);
end;

function BytesToHex(const n: Cardinal): stringoverload;
begin
  result := BytesToHex(IntToStr(n));
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 9828
Erhaltene Danke: 1032

W2k .. W7pro
TP3 .. D7pro .. D10.1
BeitragVerfasst: Heute um 12:30 
Moin!

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
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

_________________
There are 10 types of people - those who understand binary and those who don´t.