2016-09-25 68 views
-1

例如,我有一個這樣的代碼:移在C++中的二進制數據

unsigned short a[2]; 

[bbbbbbbb][bbbbbbbb][bbbbxxxx][xxxxxxxx] // b : data, x : unused data 

如何這個二進制序列,使得它看起來像這樣移位:

[000000bb][bbbbbbbb][bbbbbbbb][bbxxxxxx] 

換句話說,我想要在數據的開始插入六個零位(例如),然後將所有實際數據移到右側。有沒有辦法做到這一點?

P.S:其實我想在unsigned int而不是unsigned short

+0

誰能解釋爲什麼是我的問題downvoted? – xersi

+0

如果你不能回答這個問題,不要浪費你的聲譽。我真的需要這個爲我的項目。 – xersi

+0

使用std :: bitset在二進制文件上按位操作。 – seccpur

回答

-1

您可以使用>>向右移動一個int:

unsigned int a = 0x1234abcd; 
a = a >> 6; 

一個變0x48d2af。同樣,使用<<左移。

編輯:

使用uint32_t<cstdint>保證32位長(或使用uint16_t,或uint64_t)。然後,你可以在路上移動你想要的:

uint32_t a = 0xFFFF1234; 
unit32_t b = 0xFF000000; 
int shiftAmount = 16; 


b = (b >> shiftAmount) | (a << (32 - shiftAmount)) ; 
a = a >> shiftAmount; 

這給: a = 0x0000FFFFb = 0x1234FF00

+0

如果a是** 0xFFFFFFFF **會怎麼樣。這是否意味着你可能會失去一些數據? – xersi

+0

我想以某種方式移動二進制序列,而不會丟失實際數據。 – xersi

+0

@xersi根據定義進行位移會導致一些位數減少。 '0xFFFFFFFF >> 16 = 0x0000FFFF'。我不確定「不丟失數據」的移位點是 –