c++ - I need to concatenate two elements of an unsigned char array into and keep it unsigned char -


i have unsigned char array[8] , want make unsigned char array, has 4 elements, example new_array[4]. elements have that: new_array[0] - concatenation of array[0] , array [1]; new_array[1] - concatenation of array[2] , array [3]; new_array[2] - concatenation of array[4] , array [5]; new_array[3] - concatenation of array[6] , array [7];

for example, if array[0]=0x01 , array[1]=0x25, new_array[0]=0x0125. please help!

thank you!

so want convert unsigned char array 8 elements unsigned short array 4 elements?

assuming final_array unsigned short[4] , initial_array unsigned char[8]:

for (unsigned int = 0; < 4; ++i) {     final_array[i] = (initial_array[i*2] << 8) + initial_array[i*2 + 1]; } 

this equivalent following:

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]; 

as side note, on big endian machine, can memcpy unsigned char buffer unsigned short buffer , work:

memcpy(final_array, initial_array, 8 * sizeof(unsigned char)); 

but not recommend because

  1. involving endianness when don't need terrible idea if want sanity.
  2. you'd making assumptions size of short. (which, theoretically speaking, can vary long holds @ least 2 bytes , has size remains less or equal of int)

Comments