簡體   English   中英

位運算符在 C++ 中附加兩個無符號字符

[英]Bit Operators to append two unsigned char in C++

如果我有兩個十六進制的東西,我可以有人如何將他們的二進制文件附加在一起以獲得一個值?

在 C++ 中,說我有

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

我想要的是1100001010100011 ,這可能使用按位運算符嗎?

我想提取 t 和 q 的二進制形式並附加它們...

是的,這是可能的。

只需使用左位移運算符,使用至少 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]。

您的示例效果不佳,因為未定義輸入值的寬度(通常為 8 位)。 例如,為什么不是您的示例:0000000100000010,這將真正按位附加 1 (00000001) 和 2 (00000010)。

如果每個值確實有一個固定的寬度,那么它可以用位移和 ORing 值來回答

編輯:如果您的“寬度”被定義為去除所有前導零的全寬度,那么可以使用移位和或運算,但更復雜。

連接兩個字符:

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;

我會使用 char 數組。

無符號的short s; 字符 * sPtr = &s; sPtr[0] = t; sPtr[1] = q;

這並不真正關心字節序。我不確定你為什么要這樣做,但這會起作用。

位方法的問題在於您不確定自己的大小。 如果你知道尺寸..我會和 Brians 一起回答

沒有二進制/十六進制附加,因為您正在處理數字(您可以附加 1 和 2 並且不要將結果 12 與“真實”12 混淆?)

你可以用一些特殊的符號來分隔它們,但你不能只是“連接”它們。

無論數字處於什么基數,作為操作追加對於數字都沒有真正意義。使用 . 作為連接運算符:在您的示例中, 0x1 。 如果連接十六進制,則 0x2 變為 0x12,如果連接二進制,則變為 0b101。 但是 0x12 和 0b101 不是相同的值(在基數 10 中,它們分別是 18 和 5)。 通常,無論您在什么基礎上操作,AOB(其中 A 和 B 是數字,O 是運算符)都應該產生相同的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM