Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an easy way to convert from 32bit integer to 16bit integer?

I have a 32 bit int and I want to address only the lower half of this variable. I know I can convert to bit array and to int16, but is there any more straight forward way to do that?

like image 458
Amir David Nissan Cohen Avatar asked Dec 20 '22 20:12

Amir David Nissan Cohen


1 Answers

It you want only the lower half, you can just cast it: (Int16)my32BitInt

In general, if you're extending/truncating bit patterns like this, then you do need to be careful about signed types - unsigned types may cause fewer surprises.

As mentioned in the comments - if you've enclosed your code in a 'checked' context, or changed your compiler options so that the default is 'checked', then you can't truncate a number like this without an exception being thrown if there are any non-zero bits being discarded - in that situation you'd need to do:

(UInt16)(my32BitInt & 0xffff)

(The option of using signed types is gone in this case, because you'd have to use & 0x7fff which then preserves only 15 bits)

like image 85
Will Dean Avatar answered Dec 22 '22 10:12

Will Dean