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
- involving endianness when don't need terrible idea if want sanity.
- you'd making assumptions size of
short
. (which, theoretically speaking, can vary long holds @ least 2 bytes , has size remains less or equal ofint
)
Comments
Post a Comment