Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

Network Byte Order nach Host Byte Order

Diskussion: Network Byte Order nach Host Byte Order im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Gute Tag, ich versuche auf einem AVR(Little Endian) DHCP zu implementieren, soweit klappt auch alles, ausser, dass ich es ...

Antwort
Alt 15.10.11, 15:01   #1 (permalink)
 
Registriert seit: 25.04.08
der_tabak Leistung: Z3
Likes: 1
Standard Network Byte Order nach Host Byte Order

Anzeige

Gute Tag,
ich versuche auf einem AVR(Little Endian) DHCP zu implementieren, soweit klappt auch alles, ausser, dass ich es nicht schaffe die Lease Time die ich vom Server bekommen, von der Network Byte Order zur Host Byte Order zu konvertieren.

Die Lease Time ist ein unsigned 32-Bit Wert, vom Server bekomme ich die Lease time in 4-Bytes opt_ptr[0-3], diese sollen nun in einer 32-Bit Variable in Little Endian gespeichert werden.

Das wäre wahrscheinlich die Methode wenn die Lease Time bereits in der Host Byte Order vorliegen würde.

Code:
state.lease_time = (opt_ptr[0]) | (opt_ptr[1] << 8) | (opt_ptr[2] << 16) | (opt_ptr[3] << 24);
Vielen Dank im Voraus.
der_tabak ist offline   Mit Zitat antworten
Alt 15.10.11, 15:51   #2 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Sind htonl / ntohl für die Plattform verfügbar?
Byte Order - The GNU C Library ?
Ansonsten:
Code:
(opt_ptr[0]) | (opt_ptr[1] << 8) | (opt_ptr[2] << 16) | (opt_ptr[3] << 24);
macht für einzelne Bytes keinen Sinn. Es soll ja nur die Bytereihenfolge
geändert werden, keineswegs die Bits selbst (außerdem: 8 Bit Zahl um 8 oder mehr Stellen nach links shiften - da kommt 0 heraus )
Also ganz einfach: wie vertauscht man eigentlich 4 Werte in einem Array?


"Klassisch" könnte man das swapping so machen:
Code:
* Swap bytes in 32 bit value.  */
#define __bswap_constant_32(x) \
     ((((x) & 0xff000000u) >> 24) | (((x) & 0x00ff0000u) >>  8) |          \
      (((x) & 0x0000ff00u) <<  8) | (((x) & 0x000000ffu) << 24))
(code aus "Byteswap.h"/glibc)
Allerdings sollte man den Wert "opt_ptr" dann als 32-Bit Value ansehen und nicht als vier 8-bit Werte.

Empfehlen würde ich aber trotzdem die entsprechenden Funktionen zu verwenden (htons/ntohl), da hier die Libs z.B das Swapping "intern" über Inline-Assemly erledigen können (was auf vielen Plattformen nur eine einzelne Anweisung braucht - und nicht ~30, wie bei dem "naiven" C-Swapping mit dem Rumgeshifte )
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 15.10.11, 16:10   #3 (permalink)
Themenstarter
 
Registriert seit: 25.04.08
der_tabak Leistung: Z3
Likes: 1
Standard

Danke,
also die avr-libc hat kein htonl/ntohl, aber ich hab mir jetzt aus deinem bzw. aus dem glibc Makro folgende Funktion gebaut:

Code:
uint32_t ntohl(uint32_t x)
{
         return ((x & 0xFF000000UL) >> 24) | ((x & 0x00FF0000UL) >>  8) | ((x & 0x0000FF00UL) <<  8) | ((x & 0x000000FFUL) << 24);
}
Sowie ich das jetzt getestet habe funktioniert das auch.
der_tabak ist offline   Mit Zitat antworten
Alt 15.10.11, 21:14   #4 (permalink)
Member of Honour
 
Benutzerbild von +++ATH0
 
Registriert seit: 02.04.05
+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3
Likes: 76
Standard

Viele Compiler bieten dafür auch intrinische Funktionen an.

MSVC: _byteswap_ulong()
GCC: __builtin_bswap32()
+++ATH0 ist offline   Mit Zitat antworten
Alt 15.10.11, 23:37   #5 (permalink)
Themenstarter
 
Registriert seit: 25.04.08
der_tabak Leistung: Z3
Likes: 1
Standard

@+++ATH0: Danke für den Tipp, die Funktion ist beim AVR-GCC vorhanden.

Geändert von der_tabak (15.10.11 um 23:48 Uhr)
der_tabak ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » Network Byte Order nach Host Byte Order
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
SMS- bit, byte? torsten Off topic-Zone 20 01.09.10 10:48
Firefox 3.5 Datei nach Download 0 Byte nookstar Applikationen 3 02.10.09 14:46
ORDER BY Zahlenwert... TeeKayo2 (Web-) Design und webbasierte Sprachen 4 26.07.06 18:05
[Source] Byte Array in VB.NET nach String durchsuchen ByteWolf Code Kitchen 0 29.05.05 15:36


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61