如果我有两件事是十六进制的,我可以有人如何将他们的二进制文件附加在一起以获得一个值吗?
在 C++ 中,说我有
unsigned char t = 0xc2; // 11000010
unsigned char q = 0xa3; // 10100011
我想要的是不知何故,
1100001010100011
这可能使用按位运算符吗?
我想提取 t 和 q 的二进制形式并附加它们......
如果我有两件事是十六进制的,我可以有人如何将他们的二进制文件附加在一起以获得一个值吗?
在 C++ 中,说我有
unsigned char t = 0xc2; // 11000010
unsigned char q = 0xa3; // 10100011
我想要的是不知何故,
1100001010100011
这可能使用按位运算符吗?
我想提取 t 和 q 的二进制形式并附加它们......
是的,这是可能的。
只需使用 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]。
连接两个字符:
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;
您的示例并不能很好地工作,因为未定义输入值的宽度(通常为 8 位)。例如,为什么不是您的示例:0000000100000010,这将真正按位附加 1 (00000001) 和 2 (00000010)。
如果每个值都具有固定宽度,则可以通过位移和 ORing 值来回答
编辑:如果您的“宽度”定义为删除所有前导零的全宽度,则可以使用移位和 ORing,但更复杂。
我会选择 char 数组。
无符号短小号;字符 * sPtr = &s; sPtr[0] = t; sPtr[1] = q;
这并不真正关心字节序。我不确定您为什么要这样做,但这会起作用。
位方法的问题是你不确定你有什么大小。如果你知道大小..我会和布莱恩一起回答
二进制/十六进制中没有附加,因为您正在处理数字(您可以附加 1 和 2 并且不会将结果 12 与“真实”12 混淆吗?)
你可以用一些特殊的符号来分隔它们,但你不能只是“连接”它们。
附加为操作对于数字来说并没有什么意义,不管它们的基数是什么。使用 . 作为连接运算符:在您的示例中, 0x1 。如果连接十六进制,0x2 变为 0x12,如果连接二进制,则变为 0b101。但是 0x12 和 0b101 不是同一个值(以 10 为底,它们分别是 18 和 5)。一般来说,AOB(其中 A 和 B 是数字,O 是运算符)应该产生相同的值,无论您在什么基础上进行操作。