如何在C中将2个4位无符号数组合成1个8位数

时间:2016-07-12 11:54:34

标签: c concatenation

我有2个4位数字(X0X1X2X3和Y0Y1Y2Y3),我想将它们组合在一起,这样我就可以创建一个8位数字:

X0X1X2X3 
Y0Y1Y2Y3  => X0Y0X1Y1X2Y2X3Y3

我知道如何连接它们以创建X0X1X1X3Y0Y1Y2Y3,但我仍然坚持如何在上面描述的模式中组合它们。

任何提示?

3 个答案:

答案 0 :(得分:3)

交换四位数的一种非常快速的方法是使用查找表:

unsigned int spread[] = {
    0x00, 0x01, 0x04, 0x05, 0x10, 0x11, 0x14, 0x15, 
    0x40, 0x41, 0x44, 0x45, 0x50, 0x51, 0x54, 0x55
};

您可以使用spread[]数组,其中“扩展”原始位,按如下方式构建输出:

unsigned int res = (spread[x] << 1) | spread[y];

诀窍在于构建查找表。选择其值使得索引的位与零交织。例如,0x07或0111 2 ,变为0x15或00010101 2

答案 1 :(得分:3)

这是执行此转换的一种相当直接的方式:

uint8_t result;
result |= (x & 8) << 4;
result |= (y & 8) << 3;
result |= (x & 4) << 3;
result |= (y & 4) << 2;
result |= (x & 2) << 2;
result |= (y & 2) << 1;
result |= (x & 1) << 1;
result |= (y & 1) << 0;

答案 2 :(得分:0)

您也可以在一行中完成此操作。

 uint8_t result =  (varX << 4) | (varY);