所以你想把一个有 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));
但我不太推荐它,因为
- 如果你想要你的理智,在你不需要的时候涉及字节序是一个糟糕的主意。
- 您将对 a 的大小做出假设
short
。(从理论上讲,只要它至少包含 2 个字节并且大小保持小于或等于 an 的大小,它就可以变化int
)