1

如果我有两件事是十六进制的,我可以有人如何将他们的二进制文件附加在一起以获得一个值吗?

在 C++ 中,说我有

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

我想要的是不知何故, 1100001010100011这可能使用按位运算符吗?

我想提取 t 和 q 的二进制形式并附加它们......

4

6 回答 6

20

是的,这是可能的。

只需使用 left-bitshift 运算符,向左移动 8 位,至少使用 16 位整数。然后二进制或第二个值到整数。

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

或者,将两个值放在包含 2 个字符的联合中(注意大端或小端)将具有相同的位级别结果。另一种选择是 char[2]。

于 2008-11-02T18:52:02.887 回答
1

连接两个字符:

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;
于 2008-11-02T18:53:25.553 回答
0

您的示例并不能很好地工作,因为未定义输入值的宽度(通常为 8 位)。例如,为什么不是您的示例:0000000100000010,这将真正按位附加 1 (00000001) 和 2 (00000010)。

如果每个值都具有固定宽度,可以通过位移和 ORing 值来回答

编辑:如果您的“宽度”定义为删除所有前导零的全宽度,则可以使用移位和 ORing,但更复杂。

于 2008-11-02T18:25:56.920 回答
0

我会选择 char 数组。

无符号短小号;字符 * sPtr = &s; sPtr[0] = t; sPtr[1] = q;

这并不真正关心字节序。我不确定您为什么要这样做,但这会起作用。

位方法的问题是你不确定你有什么大小。如果你知道大小..我会和布莱恩一起回答

于 2008-11-02T21:31:28.527 回答
-2

二进制/十六进制中没有附加,因为您正在处理数字(您可以附加 1 和 2 并且不会将结果 12 与“真实”12 混淆吗?)

你可以用一些特殊的符号来分隔它们,但你不能只是“连接”它们。

于 2008-11-02T18:22:15.583 回答
-2

附加为操作对于数字来说并没有什么意义,不管它们的基数是什么。使用 . 作为连接运算符:在您的示例中, 0x1 。如果连接十六进制,0x2 变为 0x12,如果连接二进制,则变为 0b101。但是 0x12 和 0b101 不是同一个值(以 10 为底,它们分别是 18 和 5)。一般来说,AOB(其中 A 和 B 是数字,O 是运算符)应该产生相同的值,无论您在什么基础上进行操作。

于 2008-11-02T18:27:18.943 回答