我需要将unsigned char数组的两个元素连接起来并保持unsigned char

时间:2013-05-05 23:25:34

标签: c++ char concatenation unsigned

我有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。 请帮忙!

谢谢!

1 个答案:

答案 0 :(得分:1)

所以你想将带有8个元素的unsigned char数组转换为带有4个元素的unsigned short数组?

假设final_arrayunsigned short[4]initial_arrayunsigned 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. 如果你想要你的理智,那么在你不需要时使用endianness就是一个可怕的想法。
  2. 您将对short的大小做出假设。 (从理论上讲,只要它至少保持2个字节并且其大小保持小于或等于int的大小,它就会有所不同)