我很難理解我應該將位從一個結構的一部分轉換到另一個結構的方式。我正在編寫一個僅在Windows/Intel系統上使用的應用程序。C++位移是哪種方式
舊結構(數據字節):
Return Number 3 bits (bits 0 – 2)
Number of Returns 3 bits (bits 3 – 5)
Scan Direction Flag 1 bit (bit 6)
Edge of Flight Line 1 bit (bit 7)
新結構(ReturnData和數據字節):
Return Number 4 bits (bits 0 - 3)
Number of Returns (given pulse) 4 bits (bits 4 - 7)
Classification Flags 4 bits (bits 0 - 3)
Scanner Channel 2 bits (bits 4 - 5)
Scan Direction Flag 1 bit (bit 6)
Edge of Flight Line 1 bit (bit 7)
位0至5應爲0作爲數據是在現有的記錄未知。我認爲轉換到使用位掩碼和移位的新結構:
New->ReturnData = (Old->DataByte & 0x07)>>1 | (Old->DataByte & 0x38)>>2;
New->DataByte = Old->DataByte & 0xC0;
這是正確的嗎?前3位(& 0x07)移位>> 1
變成第一個nibble而第二個3位(& 0x38)移位>> 2
第二個nibble形成一個字節..或者是另一種方式移位,因爲英特爾是另一個字節碼?
移位時,您不必關心字節順序。當你有'X = Y >> 1'時,X總是比Y更小(或者等於0),而不管字節順序如何。 – Aitch 2015-02-09 00:22:30