8

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, 65532)

Dylan Vester
  • 2,686
  • 4
  • 29
  • 40

3 Answers3

14

Have you tried explicit casting?

UInt16 x = 65535;
var y = (Int16)x; // y = -1
pblasucci
  • 1,738
  • 12
  • 16
2

Using unchecked here avoids a crash if [X] Check for Arithmetic Overflow is on:

UInt16 x = 65535;
Int16 y = unchecked((Int16)x);
Wai Ha Lee
  • 8,598
  • 83
  • 57
  • 92
Christoph
  • 3,322
  • 2
  • 19
  • 28
-2

Or like this

Or like this

Just check if UI16>32767 if yes, I16=UI16-65536, otherwise = UI16

Ramil Aliyev 007
  • 4,437
  • 2
  • 31
  • 47
Hergé
  • 11