![]() |
Binärcode <--> ASCII
Hallo,
ich habe einen String in dem nur 0 und 1 vorkommen. Dieser String ist durch 8 Teilbar und immer acht Zeichen stellen ein Zeichen aus der ASCII Tabelle dar. Jetzt wollte ich Fragen ob es eine einfache Möglichkeit gibt diesen 0 und 1 String in ASCII Zeichen zu verwandeln... Ich hoff ihr versteht mein Problem......... Bin dankbar für jede Hilfe, Ferby |
Re: Binärcode <--> ASCII
sollte das nicht mit
Delphi-Quellcode:
und
bintoHex
Delphi-Quellcode:
strtoInt('$A') gibt 10
char(strtoInt($Hex))
gehen? Grüße Klaus |
Re: Binärcode <--> ASCII
Hmm ich denke mal er will kein Hex, ich denke er will Dezimalzahlen hat:
Klar geht es auch mit Hexdezimalzahlen, jedoch anschaulich sind wohl eber die Dezimalzahlen, oder haste jemand schon mal ne Einkaufsliste mit A1 Tomaten geschrieben? Edit: Ahh hast nen StrToInt hinzugefügt... geht das denn? kann ich StrToInt('A') machen und es kommt 10 raus?
Delphi-Quellcode:
0000 = 0 0001 = 1 0010 = 2 0011 = 3 0100 = 4 0101 = 5 0110 = 6 0111 = 7 1000 = 8 1001 = 9 1010 = 10 1011 = 11 1100 = 12 1101 = 13 1110 = 14 1111 = 15 |
Re: Binärcode <--> ASCII
Falls die Binärzahl als String vorliegt, könnte das hier helfen:
Delphi-Quellcode:
Grüße vom marabu
function DualToStr(dual: String): String;
var i: integer; b: Byte; pcIn, pcOut: PChar; begin SetLength(Result, Length(dual) div 8); pcIn := @dual[1]; pcOut := @Result[1]; b := 0; for i := 1 to Length(dual) do begin b := b shl 1 + Ord(pcIn^ <> '0'); if i mod 8 = 0 then begin pcOut^ := Chr(b); b := 0; Inc(pcOut); end; Inc(pcIn); end; end; |
Re: Binärcode <--> ASCII
sieht ja nett aus aber warum Pointer nutzen??
Ich meine man könnte doch einfach die Laufvariable i nehmen und die Strings direkt anquatschen! Und warum der Ergebnisvariablen eine länge gebne?
Delphi-Quellcode:
SetLength(Result, Length(dual) div 8);
So irgendwie:
Delphi-Quellcode:
function DualToStr(dual: String): String;
var i: integer; b: Byte; begin b := 0; for i := 1 to Length(dual) do begin b := b shl 1 + Ord(dual[i] <> '0'); if i mod 8 = 0 then begin result[i div 8] := Chr(b); b := 0; end; end; end; |
Re: Binärcode <--> ASCII
Hallo Eichhoernchen,
von den Zeigern hatte ich mir einen Geschwindigkeitsvorteil versprochen, aber dann kam mir ein längerer Aufenthalt in der heimischen Keramikausstellung dazwischen. Das Setzen der Länge sollte schon sein, aber um niemanden mehr mit den Zeigern zu verwirren, hier eine Version, welche auch mit krummen Längen des dualen Strings zurecht kommen sollte:
Delphi-Quellcode:
Gute Nacht
function DualToStr(dual: String): String;
var i, iResult, iLen, iOffset: integer; b: Byte; begin iLen := Length(dual); iOffset := iLen mod 8; SetLength(Result, iLen div 8 + Ord(iOffset > 0)); b := 0; iResult := 0; for i := 1 to iLen do begin b := b shl 1 + Ord(dual[i] <> '0'); if i mod 8 = iOffset then begin Inc(iResult); Result[iResult] := Chr(b); end; end; end; marabu |
Re: Binärcode <--> ASCII
War jetzt kein gemeckere, wollte eben nur fragen, wir haben im Informatikunterricht gerade auch Zeiger und Listen durchgenommen und habe jetzt auch endlich den Sinn dahinter verstanden. Hatte mich eben nur gefragt warum man das so machen sollte wo Delphi einem doch das eben alles abnimmt!
|
Re: Binärcode <--> ASCII
Hi,
Zitat:
Tatsache ist bei dem ersten Lösungsansatz nur das man weder die Dezimal noch die Hex Zahl jemals zu gesicht bekommen würde und da die sowieso in gleicher Form im Speicher liegen macht das relativ wenig Unterschied! ;) Muss dann also jeder selber wissen wie er es Anzeigen will ! Greetz Boombuler |
Re: Binärcode <--> ASCII
Hallo,
danke für die ganzen Antworten, ich habe mir eure Lösungsvorschläge angeschaut, leider konnte ich jetzt zwei Tage nicht ins Internet und habe mir meine eigene Lösung geschrieben... zumindest versucht. Bei mir kommt die Fehlermeldung: [Fehler] TypUmwandlungen.pas(109): Inkompatible Typen: 'Char' und 'ShortString' Hier der Quellcode:
Delphi-Quellcode:
function BitToAsc(Bit :AnsiString): AnsiString;
var i:integer; begin result:=''; // Zuerst die Zahl auf durch 8 Teilbar bringen while length(Bit) mod 8 <> 0 do Bit:=Bit + '0'; // Dann immer 8 Bit Werte in einen ASCII Wert umwandeln for i:=1 to (length(bit) div 8) do result[i]:=result[i] + char(1 + BitToInt(Bit[1+(i-1)*8] + Bit[2+(i-1)*8] + Bit[3+(i-1)*8] + Bit[4+(i-1)*8] + Bit[5+(i-1)*8] + Bit[6+(i-1)*8] + Bit[7+(i-1)*8] + Bit[8+(i-1)*8])); // In dieser Zeile kommt die Fehlermeldung end; function BitToInt(Bit: string):integer; var i, zahl: integer; begin result:=0; zahl:=1; for i:=1 to length(bit) do begin if strtoint(bit[i])=1 then result:=result + zahl; inc(zahl,zahl); end; end; Ich hoffe das der Quellcode, wenn der eine Fehler behoben ist, funktioniert... habe ihn leider noch nicht testen können, aber aus meiner Sicht müsste er hinhauen..... Kann mir jemand sagen warum dieser Fehler kommt? Wiso kann ich einen String kein Chat zuordnen, das es anders rum nicht geht ist logisc, aber das es so nicht geht wie ich es gemacht habe kapier ich nicht..... Ferby |
Re: Binärcode <--> ASCII
anstelle von diesem
Delphi-Quellcode:
mal dies probieren
for i:=1 to (length(bit) div 8) do
result[i]:=result[i] + char(1 + BitToInt(Bit[1+(i-1)*8] + Bit[2+(i-1)*8] + Bit[3+(i-1)*8] + Bit[4+(i-1)*8] + Bit[5+(i-1)*8] + Bit[6+(i-1)*8] + Bit[7+(i-1)*8] + Bit[8+(i-1)*8])); // In dieser Zeile kommt die Fehlermeldung
Delphi-Quellcode:
for i:=1 to (length(bit) div 8) do
result:=result + char(1 + BitToInt(Bit[1+(i-1)*8] + Bit[2+(i-1)*8] + Bit[3+(i-1)*8] + Bit[4+(i-1)*8] + Bit[5+(i-1)*8] + Bit[6+(i-1)*8] + Bit[7+(i-1)*8] + Bit[8+(i-1)*8])); // In dieser Zeile kommt die Fehlermeldung Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz