-1

我有无符号字符数组[8],我想创建另一个无符号字符数组,它有 4 个元素,例如 new_array[4]。它的元素必须是这样的: new_array[0] - 数组 [0] 和数组 [1] 的串联;new_array[1] - 数组 [2] 和数组 [3] 的串联;new_array[2] - 数组 [4] 和数组 [5] 的串联;new_array[3] - 数组 [6] 和数组 [7] 的串联;

例如,如果 array[0]=0x01 和 array[1]=0x25,那么 new_array[0]=0x0125。请帮忙!

谢谢!

4

1 回答 1

1

所以你想把一个有 8 个元素的 unsigned char 数组转换成一个有 4 个元素的 unsigned short 数组?

假设这final_array是一个unsigned short[4]并且initial_array是一个unsigned char[8]

for (unsigned int i = 0; i < 4; ++i) {
    final_array[i] = (initial_array[i*2] << 8) + initial_array[i*2 + 1];
}

这等效于以下内容:

final_array[0] = (initial_array[0] << 8) + initial_array[1];
final_array[1] = (initial_array[2] << 8) + initial_array[3];
final_array[2] = (initial_array[4] << 8) + initial_array[5];
final_array[3] = (initial_array[6] << 8) + initial_array[7];

附带说明一下,在 Big Endian 机器上,您可以memcpy将 unsigned char 缓冲区转换为 unsigned short 缓冲区,它可以工作:

memcpy(final_array, initial_array, 8 * sizeof(unsigned char));

但我不太推荐它,因为

  1. 如果你想要你的理智,在你不需要的时候涉及字节序是一个糟糕的主意。
  2. 您将对 a 的大小做出假设short。(从理论上讲,只要它至少包含 2 个字节并且大小保持小于或等于 an 的大小,它就可以变化int
于 2013-05-05T23:47:39.313 回答