我有unsigned char数组[8],我想创建另一个unsigned char数组,它有4个元素,例如new_array [4]。它的元素必须是这样的: new_array [0] - array [0]和array [1]的串联; new_array [1] - 数组[2]和数组[3]的连接; new_array [2] - array [4]和array [5]的连接; new_array [3] - 数组[6]和数组[7]的连接;
例如,如果array [0] = 0x01且array [1] = 0x25,则new_array [0] = 0x0125。 请帮忙!
谢谢!
答案 0 :(得分: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));
但我不非常推荐它,因为
short
的大小做出假设。 (从理论上讲,只要它至少保持2个字节并且其大小保持小于或等于int
的大小,它就会有所不同)