如何连接按顺序存储在数组中的高位和低位半字节?

2 c arrays bit-shift

我有一个包含半字节列表的数组:

{0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, ...}
Run Code Online (Sandbox Code Playgroud)

我想通过左移高位半字节并将其与低位字节连接,将相邻的半字节组合成单个字节.输出应如下所示:

{0xab, 0xcd, 0xef, ...}
Run Code Online (Sandbox Code Playgroud)

我怎样才能在C中实现这一目标?

jpa*_*cek 7

就像是

char *input, *output;
int i;
...
for(i=0; i<len; i+=2) {
  output[i/2]=(input[i]<<4) | input[i+1];
}
Run Code Online (Sandbox Code Playgroud)

提供输出作为数组至少是输入的一半,并且输入中没有设置高半字节.

  • 您可以在C99模式下在`for`中声明变量. (2认同)

Chr*_*isN 6

无需为您编写整个代码,这里有一个提示:

unsigned int Nibble1 = 0x0A;
unsigned int Nibble2 = 0x0B;

unsigned int Result = (Nibble1 << 4) | Nibble2; // Result = 0xAB
Run Code Online (Sandbox Code Playgroud)

然后,您只需要编写一个循环,一次遍历输入数组的两个元素并写入输出数组。

我希望这有帮助!