AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Binärcode <--> ASCII

Ein Thema von ferby · begonnen am 27. Mär 2006 · letzter Beitrag vom 29. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#1

Binärcode <--> ASCII

  Alt 27. Mär 2006, 20:35
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Binärcode <--> ASCII

  Alt 27. Mär 2006, 20:50
sollte das nicht mit
bintoHex und
char(strtoInt($Hex)) strtoInt('$A') gibt 10

gehen?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Binärcode <--> ASCII

  Alt 27. Mär 2006, 20:58
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
Jan
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Binärcode <--> ASCII

  Alt 27. Mär 2006, 20:59
Falls die Binärzahl als String vorliegt, könnte das hier helfen:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Binärcode <--> ASCII

  Alt 27. Mär 2006, 21:11
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?

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;
Jan
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Binärcode <--> ASCII

  Alt 27. Mär 2006, 22:27
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:
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;
Gute Nacht

marabu
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Binärcode <--> ASCII

  Alt 27. Mär 2006, 23:04
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!
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Binärcode <--> ASCII

  Alt 28. Mär 2006, 08:43
Hi,

Zitat von Eichhoernchen:
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?
Frag mich sowieso was du mit 161 Tomaten willst!

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
"Look at you, Hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?"
SwapIt Highscore:
  Mit Zitat antworten Zitat
ferby

Registriert seit: 15. Aug 2004
Ort: Wien
841 Beiträge
 
Delphi 2010 Enterprise
 
#9

Re: Binärcode <--> ASCII

  Alt 29. Mär 2006, 14:59
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Binärcode <--> ASCII

  Alt 29. Mär 2006, 15:18
anstelle von diesem

Delphi-Quellcode:
 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
mal dies probieren

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
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz