C++ 我需要将一个无符号字符数组的两个元素连接到一个数组中,并保持它为无符号字符
我有一个无符号字符数组[8],我想创建另一个无符号字符数组,它有4个元素,例如new_数组[4]。其要素必须如下所示: 新的_数组[0]-数组[0]和数组[1]的串联; 新的_数组[1]-数组[2]和数组[3]的串联; 新的_数组[2]-数组[4]和数组[5]的串联; 新的_数组[3]-数组[6]和数组[7]的级联 例如,如果数组[0]=0x01和数组[1]=0x25,则新的_数组[0]=0x0125。 请帮忙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个元素的无符号短数组 假设
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];
}
但是我不太推荐它,因为
短款的大小进行假设。(从理论上讲,只要它至少包含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));