Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
binaere daten lesen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - C
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hugenay
Gast





BeitragVerfasst am: 10. Sep 2002 18:48   Titel: binaere daten lesen

hi,
wie kann ich in C binaere Daten auslesen?

Hintergrund: ich habe ein programm in perl geschrieben, dass mittels unpack und pack daten aus einer Datei extrahiert und in hex, dez und ascii werte "uebersetzt".
Jetzt moechte ich das in C machen. Ich weiss etwa, dass die ersten 4 byte eine hex zahl darstellen. Wie kann ich da vorgehen, welche Bibliothek kann mir helfen?

Ich will auf diesem Wege mich mal wieder an C ranwagen.


gruss hug.
 

Sandro
Gast





BeitragVerfasst am: 10. Sep 2002 19:05   Titel: Re: binaere daten lesen

Hallo Hugenay

Versuchs doch mal mit "man fopen" und "man fread".

mfG Sandro
 

hugenay
Gast





BeitragVerfasst am: 10. Sep 2002 19:58   Titel: Re: binaere daten lesen

thx sandro,
dann fehlt aber noch einschritt, wenn ich die manpages richtig verstehe, das ich ja dann die daten erstmal mit nem pointer gezielt ansprechen kann. Wie aber "uebersetze" ich die dann. Oder hab ich was falsch verstanden? Ich hoffe auf ne funktion, die daraufhin direkt in einen hexwert umwandelt (also 0x0a statt bineaeres zeugs)
gruss hug.
 

Sascha Müller
Gast





BeitragVerfasst am: 10. Sep 2002 20:13   Titel: Re: binaere daten lesen

Für sowas ist printf die beste Lösung. Diese Funktion sollte man sich genau ansehen, da es in anderen Sprachen kaum etwas so mächtiges gibt. Um bspw. einen Integer in der von Dir gewünschten Darstellung anzugeben, würde ich schreibe:
code:
printf("%#06x",a);


Das "x" stellt die Zahl hexadezimal dar, "#" sorgt für das "0x" davor, "6" steht für 6 Zeichen breit und "0" füllt führende Nullen auf.
 

hugenay
Gast





BeitragVerfasst am: 10. Sep 2002 20:32   Titel: Re: binaere daten lesen

hi sascha,
danke, printf ist mir natuerlich ein begriff, aber scheinbar nur marginal. Wenn das a fuer die variable oder den pointer steht, ist das ja genau was ich suche und printf muss echt maechtig sein
hab printf jetzt noch nicht genauer nachgelesen, erstmal schlaf nachholgen, aber danke schon mal.
 

hugenay
Gast





BeitragVerfasst am: 10. Sep 2002 20:33   Titel: Re: binaere daten lesen

zu frueh gepostet. Du schreibst ja von integer. ich hab keine integer, sondern binaere daten, die eine hex zahl darstellen, dann ist printf wohl nicht ganz richtig, oder?
 

hubert
Gast





BeitragVerfasst am: 10. Sep 2002 20:39   Titel: Re: binaere daten lesen

> Du schreibst ja von integer. ich hab keine integer, sondern binaere daten, die eine hex zahl darstellen, dann ist printf wohl nicht ganz richtig, oder?

intern ist sowieso alles binär. hex-, integer-darstellung etc sind ein "feature" des betriebssystems. ist einfach handlicher so und man will das feature schon bald nicht mehr missen.
also einfach mal ausprobieren.
 

hugenay
Gast





BeitragVerfasst am: 11. Sep 2002 20:44   Titel: Re: binaere daten lesen

Hi,
printf macht die sache schon ganz gut. Aber kleine Problemchen hab ich noch.

das erste byte meiner datei muss 36, das zweite 07 sein.
hexdump zeigt mir:
0724 1234 1234 1234 1234 1234 1234 1234 usw. an.
24 ist dezimal die 36 und 07 ist dezimal natuerlich auch 07. hexdump scheint die nibbles also umgedreht anzuzeigen.
In C jetzt:

int wert;
fread(&wert, 1, 1, file);
printf ("%X
", wert);
fread(&wert, 1, 1, file);
printf ("%X
", wert);

raus kommt dann:
BFFFFB24
BFFFFB07
was machen die bffffb da?


gruss hug.
 

Sandro
Gast





BeitragVerfasst am: 11. Sep 2002 20:55   Titel: Re: binaere daten lesen

Hi hugenay

Ein int ist unter Linux 32 bit breit,also 4 Byte.Mit fread() liest du ein einzelnes Byte ein,das dann in wert landet.Die anderen 3 Bytes von wert enthalten also Müll.Diesen Müll gibst du mit dem printf()-Aufruf aber aus,da %X einen int und nicht ein byte ausliest.

mfG Sandro
 

hugenay
Gast





BeitragVerfasst am: 11. Sep 2002 21:07   Titel: Re: binaere daten lesen

ah, danke! Bearbeite ich dass dann mit printf oder sprintf um den Muell rauszufiltern?

Und wie kann ich die nibbles umdrehen, also wenn ich zb 0724 einlese und daraus aber 2407 machen will? Per regex?
Ich sollte mir vielleicht mal ein umfassendes Buch zu legen, Fragen ueber Fragen.
gruss hug.
 

Sandro
Gast





BeitragVerfasst am: 11. Sep 2002 21:12   Titel: Re: binaere daten lesen

Setze doch einfach wert vor jedem fread() auf 0.Dass sollte schon reichen.

mfG Sandro
 

hugenay
Gast





BeitragVerfasst am: 12. Sep 2002 13:11   Titel: Re: binaere daten lesen

Hi,
auf 0 setzen war ein guter Tipp.
Wenn ich jetzt aber mehr als 1 Byte einlese, werden sie falsch eingelesen. Statt 00d7 kommt d700, in Perl wuerde ich dann z.B. jeweils ein Byte einlesen und diesen dann als String zusammenfuegen (.=). Wie wuerde man in C vorgehen?
gruss hug.
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - C Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy