2008-11-02 59 views
1

如果我有兩件東西是十六進制的,我可以如何將他們的二進制文件附加在一起得到一個值嗎?位操作符

在C++中, 說我有

unsigned char t = 0xc2; // 11000010 
unsigned char q = 0xa3; // 10100011 

我要的是不知何故, 1100001010100011,這可能使用位運算符?

我想提取T和Q的二進制形式和追加他們...

回答

-2

有二進制/六角沒有追加,因爲你是用數字處理(可以追加1和2,而不是混淆導致12與「真正」12?)

你可以用一些特殊符號分隔它們,但你不能只是「連接」它們。

0

你的例子並沒有太好的工作,因爲輸入值的寬度(通常是8位)沒有定義。例如,爲什麼不是你的例子:0000000100000010,這將確實追加1(00000001)和2(00000010)位智慧。

如果每個值確實有一個固定的寬度然後它可以用位移位和或門來回答值

編輯:如果你的「寬度」與所有領先的零的刪除,那麼它定義的全寬可能與移位和ORing有關,但更復雜。

-2

作爲一個操作追加對數字沒有意義,無論他們在什麼基礎。使用。作爲連接運算符:在你的例子中,0x1。如果連接十六進制,則0x2變爲0x12;如果連接二進制,則0xb101變爲0b101。但0x12和0b101不是相同的值(以10爲底,分別爲18和5)。一般來說,無論您使用何種基地,A O B(其中A和B都是數字,O是運營商)應該會得到相同的值。

+0

他要求在二進制= P。這是一個明確的操作。當做像哈夫曼編碼這樣的東西時,這實際上也是有用的。 – Claudiu 2008-11-02 18:32:31

19

是的,這是可能的。

只需使用左移位運算符,使用至少一個16位整數向左移8。然後二進制或第二個值到整數。

unsigned char t = 0xc2; // 11000010 
unsigned char q = 0xa3; // 10100011 
unsigned short s = (((unsigned short)t)<<8) | q; //// 11000010 10100011 

可選擇地把兩個值中含有2個字符(小心大端或小的)的聯合將有相同的位的電平的結果。另一個選項是char [2]。

+0

在你的最後一句話中,假設你正在談論一個char [2]和short的聯合,它取決於endianness。 – 2008-11-02 19:38:26

0

連接兩個字符:

unsigned char t = 0xc2; // 11000010 
unsigned char q = 0xa3; // 10100011 

int result = t; // Put into object that can hold the fully concatenated data; 
result <<= 8;  // Shift it left 
result |= q;  // Or the bottom bits into place; 
0

我會用字符數組去。

unsigned short s; char * sPtr =&s; sPtr [0] = t; sPtr [1] = q;

這並不真正關心endian .. 我不知道你爲什麼想這樣做,但這將工作。

位方法的問題是你不確定你有多大。 如果你知道的大小..我會去與布里亞斯回答