2017-04-05 1 views
0

Ich versuche, Daten von einem GPS-Empfänger zu extrahieren. Die Art und Weise, wie sie ihre Informationen übertragen, wird in der folgenden Abbildung gezeigt.Kombinieren von zwei Teilen eines Wortes mit einem Teil eines anderen Wortes und Verwenden eines Skalierungsfaktors

Bit information

Ich versuche Roota zu bekommen. Ich habe Wort 8 und Wort 9 in separaten Bitsets. Wie kombiniere ich die relevanten Bits zu einem Bitset?

Ich muss auch diese Skalierungsfaktorinformationen verwenden, um eine doppelte Präzisionszahl zu erhalten. Die Informationen zum Skalierungsfaktor werden unten angezeigt.

scale factor information

Ich habe

versucht
std::bitset<32> word8_binary; // is filled with word 8 data. 
std::bitset<32> word9_binary; // is filled with word 9 data. 

std::bitset<32> roota_binary; 

for (int i=13; i>5; i--) 
{    
    roota_binary = word8_binary[i] << 32 | word9_binary[i]; 
} 

Aber das gibt mir nicht das Ergebnis, das ich will. Ich weiß auch nicht, wie ich den Skalierungsfaktor verklagen soll.

Ihre Hilfe würde sehr geschätzt werden.

+0

Wie werden diese Daten empfangen? Jedes * "Wort" * ist nur 30 Bits! Der Nachrichtenrahmen von 300 Bits wäre für den zweiten Rahmen nicht Byte-ausgerichtet. – sawdust

Antwort

0

Dies könnte nicht sein „C++“ genug, aber ich würde auf die entsprechenden Zahlen Bit-Manipulation tun:

ulong roota_binary = (((word8_binary.to_ulong() >> 6) & 0xFF) <<24) + 
        ((word9_binary.to_ulong() >>6) & 0xFFFFFF); 

Die >>6 der Paritätsbits entledigt, isolieren die Masken, die Bits, die Sie brauchen, und die <<24 setzt die hohen auf die Oberseite.

Verwandte Themen