C++ 我需要将一个无符号字符数组的两个元素连接到一个数组中,并保持它为无符号字符

C++ 我需要将一个无符号字符数组的两个元素连接到一个数组中,并保持它为无符号字符,c++,char,concatenation,unsigned,C++,Char,Concatenation,Unsigned,我有一个无符号字符数组[8],我想创建另一个无符号字符数组,它有4个元素,例如new_数组[4]。其要素必须如下所示: 新的_数组[0]-数组[0]和数组[1]的串联; 新的_数组[1]-数组[2]和数组[3]的串联; 新的_数组[2]-数组[4]和数组[5]的串联; 新的_数组[3]-数组[6]和数组[7]的级联 例如,如果数组[0]=0x01和数组[1]=0x25,则新的_数组[0]=0x0125。 请帮忙 谢谢大家! 那么您想将包含8个元素的无符号字符数组转换为包含4个元素的无符号短数组

我有一个无符号字符数组[8],我想创建另一个无符号字符数组,它有4个元素,例如new_数组[4]。其要素必须如下所示: 新的_数组[0]-数组[0]和数组[1]的串联; 新的_数组[1]-数组[2]和数组[3]的串联; 新的_数组[2]-数组[4]和数组[5]的串联; 新的_数组[3]-数组[6]和数组[7]的级联

例如,如果数组[0]=0x01和数组[1]=0x25,则新的_数组[0]=0x0125。 请帮忙


谢谢大家!

那么您想将包含8个元素的无符号字符数组转换为包含4个元素的无符号短数组

假设
final\u数组
是一个
无符号短字符[4]
initial\u数组
是一个
无符号字符[8]

for (unsigned int i = 0; i < 4; ++i) {
    final_array[i] = (initial_array[i*2] << 8) + initial_array[i*2 + 1];
}
但是我不太推荐它,因为

  • 如果你想要你的理智,在你不需要的时候加入endianness是一个糟糕的主意
  • 您将对
    短款的大小进行假设。(从理论上讲,只要它至少包含2个字节,并且大小仍然小于或等于
    int
    ,它就可以变化。)

  • char
    s通常为8位。您希望如何将
    0x0125
    放在单个
    char
    中?这没有意义。单个
    无符号字符
    不能表示“两个无符号字符的串联”。(考虑两个连续的最大值。)
    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];
    
    memcpy(final_array, initial_array, 8 * sizeof(unsigned char));