Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Motorola byte order umwandeln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
21.11.2005, 16:21 Uhr
~iBOT
Gast


Hi,
Ich habe ein char*buf in dem sich daten befinden. Leider sind diese in motorola byte order! Wie kann ich diese in die Intel byte order umwandeln?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.11.2005, 17:05 Uhr
virtual
Sexiest Bit alive
(Operator)


Motorola benutzt die network byte order und damit big endian; Intel die litte endian ordnung.

ntohl ntohs sind daher deine Freunde. in welchem Header die liegen, ist Systemabhängig.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.11.2005, 17:09 Uhr
~iBot
Gast


Das hatte ich auch schon gelesen! Aber ich habe ja ein char[] und die functionen nehmen nur short oder long! Muß ich den qutsch dan einzeln durchgehen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
21.11.2005, 17:12 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


nicht einzeln, immer 2 zusammen bzw je nach größe deines zeichensatzes.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.11.2005, 17:13 Uhr
virtual
Sexiest Bit alive
(Operator)


Also wenn die Daten 8 Bit portionen sind, brauchst Du ganrichts zu machen. Sind es 16 oder 32 Bit Portionen, mußt Du eben casten:

C++:
char* buf;
...
ntohl( *(long*)buf );


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.11.2005, 17:36 Uhr
~iBOT
Gast


Also ich habe folgendes:


C++:
TIFFGetField(tif, TIFFTAG_RICHTIFFIPTC, &count, &buf);
    
    ntohl( *(long*)buf );
    
    FILE *f = fopen("c:\\sdsd.txt","wb");
    
    fwrite(buf,sizeof(char),count*4,f);
    fclose(f);



Und wenn ich das mache ändert sich garnichts. Ich glaube ich stehe heute ein bischen auf dem schlauch!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.11.2005, 17:47 Uhr
ao

(Operator)


ntohl arbeitet nicht in-place auf der Input-Variablen. Du musst den Rückgabewert abholen, der ist umgewandelt.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.11.2005, 17:50 Uhr
~iBOT
Gast


Hab ich mir auch gedacht! ist er aber nicht! Oder weden nur die ersten zeichen gewandeltt? Das chararray ist ja größer als 32byte
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.11.2005, 17:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


dann musste das natürlich für alle 4er blöcke tun, nicht nur für den ersten
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.11.2005, 18:07 Uhr
~iBOT
Gast


und das geht wie?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: