Wie Lesen Sie in einem 3-byte-Wert als integer in c++?
Bin ich beim Lesen in einem id3-tag, wo die Größe der einzelnen Frames angegeben wird, in 3 bytes. Wie würde ich mich in der Lage zu nutzen, um diesen Wert als int?
- Was bedeuten "Lesen"? Aus dem Gedächtnis? Aus einer Datei?
- In C könnte man nutzen, sowas nennt man ein bit-Feld Eingabe als int auf 3 Byte = 3*8=24 bit. In C ist dies gekennzeichnet durch
int int_3byte : 24
(innerhalb einer Struktur). Ich nehme an C++ hat einen gleichwertigen Mechanismus für diese. - Bitte verwenden Sie nicht ein Bitfeld.
- Warum nicht? Sagen, ich brauche ein 100-Elemente-array mit 3-byte-Werte-- es wäre einfacher, mit einem bit-Feld, nicht?
- Ich bin mir nicht sicher, wie würden Sie das tun; ein Bitfeld, kann nur erklärt werden als Teil einer Struktur, nicht auf seine eigene. Wie werden Sie gehen, um dieses array-up?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen jedes byte und dann legen Sie Sie zusammen in Ihrem
int
:Stellen Sie sicher, nehmen endian berücksichtigen.
+
oder|
? [..]byte0
,byte1
, undbyte2
habenunsigned char
geben (oder haben Werte im Bereich von0..255
)Lesen Sie die bytes einzeln, und legen Sie Sie in den richtigen stellen in ein int:
Edit: es scheint, dass die ID3-Netzwerk verwendet (big-endian) - byte-Reihenfolge, veränderten code zu entsprechen.
char
ist unsigniert... (Auchfgetc
gibt einint
!)fgetc()
an alle, aber ich bin mit Jerry.Wenn Ihr Prozess Berechnung intensive, und Sie wollen, um Zeit zu sparen (insb. wenn Sie das tun, embedded systems), mein Vorschlag wird sein, verwenden Sie union/struct. Dies nimmt die Last von shift Links und shift rechts.
Sollte diese Arbeit. Wenn jemand fühlt, diese sollten nicht verwendet werden, bitte lassen Sie mich wissen, der Grund.
Prost!
Aditya