Convert an unsigned 16 bit int to a signed 16 bit int in C#
I'm writing a datalog parser for a robot controller, and what's coming in from the data log is a number in the range of 0 - 65535 (which is a 16 bit unsigned integer if I'm not mistaken). I'm trying to convert that to a signed 16 bit integer to display to the user (since that was the actual datatype before the logger changed it).
Can someone give me a hand?
Example:
What the values should be (0, -1, -2, -3, -4)
What the values are (0, 65535, 65534, 65533, 开发者_StackOverflow65532)
Have you tried explicit casting?
UInt16 x = 65535;
var y = (Int16)x; // y = -1
Using unchecked
here avoids a crash if [X] Check for Arithmetic Overflow
is on:
UInt16 x = 65535;
Int16 y = unchecked((Int16)x);
Or like this
Just check if UI16>32767
if yes, I16=UI16-65536
, otherwise = UI16
精彩评论