bereich vom header wird falsch ausgegeben

Gast #5644788
Lesenswert?

Hallo,
ich habe ein rtp-header, wo die SSRC selber angepasstu wurden. 
Normalerweise ist der SSRC 32 Bit groß
Unser SSRC ist in einem Struct definiert und sieht jetzt wie folgt aus
1
typedef struct rtp_header{
2

3
    unsigned cc:4;     
4
    unsigned x:1; 
5
    unsigned p:1;  
6
    unsigned v:2;  
7

8
    unsigned pt:7; 
9
    unsigned m:1;  
10

11
    uint16   seq_num;
12
    uint32   timestamp;
13

14
    struct
15
    {
16
      unsigned f1:3;
17
      unsigned f2:4;
18
      unsigned f3:4;
19
      unsigned f4:2;
20
      unsigned f5:2;
21
      unsigned f6:1;
22
    }__attribute__ ((packed)) ssrc_own;
23

24
    uint16   ssrc;
25

26
} __attribute__ ((packed)) rtp_header_t;

Alle Daten passen soweit. Aber wenn ich den ssrc_own wie folgt 
beschreibe
f1 = 0b000
f2 = 0b1001
f3 = 0b0010
f4 = 0b01
f5 = 0b00
f6 = 0b0

also 0001001001001000 (0x12 0x48)

bekomme ich heraus
0100100000001001 (0x48 0x09)

ich weiß, dass es etwas mit dem endian zu tun hat. Allerdings bekomme 
ich es absolut nicht hin das Problem zu lösen.

Hat hier jemand evtl einen tip, wie ich es machen könnte?
Moderator Persönliche Seite #5644797
Lesenswert?

Müssen es wirklich Bitfields sein? Diese sind nicht portabel, gerade was 
Endianess angeht.

Mach aus ssrc_own ein uint16 ssrc_own und setze die gewünschten Bits per 
Shift und Bitset.

> bekomme ich heraus
> 0100100000001001 (0x48 0x09)

Wie hast Du dies herausbekommen? Du hast über die gepackte struct keine 
union gelegt. Vermutlich über Pointer auf ssrc_own ... genauso 
unportabel.

Zeig bitte mehr Code, bitte. Insbesondere, wie Du die struct beschreibst 
und wie Du sie wieder ausliest.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren