2016-03-24 12 views
-1

Ich lese Bytes aus der Datei. Für dieses Beispiel lese ich zwei Bytes (dargestellt in Hexa)Putting zwei Bytes zusammen

94 und 73. Wie kann ich diese beiden Bytes zusammensetzen, damit sie wie folgt aussehen:

9470?

Ich kann 73 >> 4 verwenden, um 70 aus 73 zu machen Aber wie kann ich sie "zusammensetzen"?

Ich versuchte (94 << 8) & (73 >> 4) verwenden, aber es gibt immer 0 zurück

ich mit Bytes wie diese über die Arbeit nichts gefunden haben. (Basicly Eineinhalb Byte in diesem Beispiel zu lesen), Lesen 2 Bytes auf einmal

Codebeispiel

uint64_t bytes; 
output.read((char *)&bytes, 2); // read 2 bytes 
uint64_t tmp  = (cutIt << (64 - 8)) >> (64 - 8) ; 
uint64_t tmp_two = ((cutIt >> 8) & 11110000) >> 4; 
uint64_t tmp_three = (tmp << 8) & tmp_two ; 
+0

können Sie den Code zeigen .... es könnte verschiedene Möglichkeiten geben .. – tod

+1

vielleicht wollten Sie '(94 << 8) | 73 'was bedeutet, erste Byte um 8 Bits zu verschieben und BITWISE OR mit 73 (zweites Byte) – johngull

+0

dies Ausgänge 5e49, nicht gewünschte Ergebnis – user3706129

Antwort

2
((94 << 8)+74) & (FFF0) 

gibt Ihnen die Ausgabe, die Sie wollen. Dafür müssen Sie binär denken.

((10010100 <<8) + 01110100) & (1111111111110000) 

die 4 Nullen am Ende werden Null aus Ihrem LSB dank der logischen AND und dein Wort legth halten.

Um die Kommentarfrage zu beantworten: Sie einfach die Anzahl der Bits, die Sie verwenden möchten, indem Sie die Anzahl der Nullen ändern. Für Ihr Beispiel würde dies bedeuten, die Nummer, die Sie für die logischen AND wäre FFFC in Hex oder in binärer 1111111111111100.

+0

Wie würde der Code abweichen, wenn ich 1 Byte laden wollte und sagen wir 6bits? (mein Beispiel war 1 Byte und 4Bits) – user3706129

0
byte b1 = 0xAB; 
byte b2 = 0xCD; 
... 
short s = (short)(b1<<8) | ((short)(b2<<4) & 0xF0); 
//s = ABC0 

Nutzung oder (|) statt und (&) die verschobenen Werte zu verschmelzen sonst immer 0.

+1

sollte 'b2 << 4' nicht 8 –

+0

Ja, Sie haben Recht, es zu beheben – Schafwolle