AMF3 - u29 und double decoding



  • Heyho!

    Ich hab momentan mit AMF3 zu tun, jedoch hab ich Probleme beim decoden von Integern & Co. Leider ist die Dokumentation von Adobe mMn. etwas schlecht dargestellt bzw. verstehe ich sie nicht (http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/amf/pdf/amf-file-format-spec.pdf):S

    Beispiel 1:

    Folgendes (Hex - double):
    41 86 3D C1 98 00 00 00

    müsste dekodiert so aussehen (Dec - double):
    23048384

    Beispiel 2:

    Folgendes (Hex - integer):
    A8 11 04 BF

    müsste dekodiert so aussehen (Dec - integer):
    5137

    Ich hoffe, dass mir jemand helfen kann bzw. eine gute Erklärung abgeben kann 🙂



  • Ich mach mal nur Beispiel 2:

    RTMPHasser schrieb:

    Beispiel 2:

    Folgendes (Hex - integer):
    A8 11 04 BF

    müsste dekodiert so aussehen (Dec - integer):
    5137

    Die Eingabe in binär lautet:
    10101000 00010001 00000100 10111111

    Erst schauen wir uns nur das erste Bit pro Byte an:
    1xxxxxxx 0xxxxxxx 0xxxxxxx 1xxxxxxx
    Wenn das erste Bit eines Bytes (also pro 8er Block) gesetzt ist, wird das nächste Byte dazugenommen, ansonsten ist fertig. Also nehmen wir nur die ersten 2 Bytes von der Eingabe.

    Entfernen wir das erste Bit (das nur zur Längenangabe dient), erhalten wir:
    -0101000 -0010001 -------- -------- (- heisst ignorieren)

    Es bleibt nur noch übrig, 0101000 0010001 in dezimal umzuwandeln. Es kommt dann 5137 heraus.

    Wie doubles encodiert sind steht da tatsächlich nicht. Es wird aber gesagt, dass das im Standard AMF-0 definiert ist (dein Link: AMF-3). Ich würde mal danach suchen.



  • heyho! schrieb:

    Ich mach mal nur Beispiel 2:

    RTMPHasser schrieb:

    Beispiel 2:

    Folgendes (Hex - integer):
    A8 11 04 BF

    müsste dekodiert so aussehen (Dec - integer):
    5137

    Die Eingabe in binär lautet:
    10101000 00010001 00000100 10111111

    Erst schauen wir uns nur das erste Bit pro Byte an:
    1xxxxxxx 0xxxxxxx 0xxxxxxx 1xxxxxxx
    Wenn das erste Bit eines Bytes (also pro 8er Block) gesetzt ist, wird das nächste Byte dazugenommen, ansonsten ist fertig. Also nehmen wir nur die ersten 2 Bytes von der Eingabe.

    Entfernen wir das erste Bit (das nur zur Längenangabe dient), erhalten wir:
    -0101000 -0010001 -------- -------- (- heisst ignorieren)

    Es bleibt nur noch übrig, 0101000 0010001 in dezimal umzuwandeln. Es kommt dann 5137 heraus.

    Wie doubles encodiert sind steht da tatsächlich nicht. Es wird aber gesagt, dass das im Standard AMF-0 definiert ist (dein Link: AMF-3). Ich würde mal danach suchen.

    1xxxxxxx 0xxxxxxx

    In dem Fall ist doch nur das erste Bit gesetzt und das zweite Bit nicht?
    Muss man das dann noch dazu nehmen?

    Anderes Beispiel:

    1xxxxxxx 1xxxxxxx 0xxxxxxx

    Dann müsste ich ja alle 3 Blöcke mit einbeziehen oder?


Log in to reply