在C#中将无符号16位int转换为带符号的16位int

时间:2010-01-31 04:48:50

标签: c# .net bit-manipulation unsigned signed

我正在为机器人控制器编写一个数据记录解析器,从数据日志中得到的是一个0到65535范围内的数字(如果我没有记错的话,这是一个16位无符号整数)。我正在尝试将其转换为带符号的16位整数以显示给用户(因为这是记录器更改之前的实际数据类型)。

有人可以帮我一把吗?

示例:

值应该是什么 (0,-1,-2,-3,-4)

价值观是什么 (0,65535,65534,65533,65532)

3 个答案:

答案 0 :(得分:12)

您是否尝试过显式投射?

UInt16 x = 65535;
var y = (Int16)x; // y = -1

答案 1 :(得分:1)

在此处使用 unchecked 可避免在 [X] Check for Arithmetic Overflow 开启时发生崩溃:

UInt16 x = 65535;
Int16 y = unchecked((Int16)x);

答案 2 :(得分:-3)

或者像这样

Or like this

检查是否UI16>32767,如果是,I16=UI16-65536,否则=UI16