Hi GPGPU hackers!

In my kernel i try to access to __global unsigned char * array as to short and int values and keep having
weird results with it, for example

Code :
__global unsigned short *l2NumPtr = buffer+tolookPos;
unsigned short l2Num = *l2NumPtr;

Here i can have l2Num value constructed from tolookPos and tolookPos-1 bit
(also from position-1 and bits swapped).
And with:
Code :
__global unsigned short *l2NumPtr = buffer+tolookPos-1
i get the SAME VALUE.
so in order to acces to any short value correctly, i must have this:
Code :
unsigned short getUShort(__global unsigned char * array, unsigned int position){
	return ((unsigned short)array[position]) << BYTE_SHIFT | array[position+1] ;

Here, i have 2 operations "wasted" and with Int value, it is already 6 operations.

Is there any option to have the right access by pointer?