标签: c# .net bit-manipulation unsigned signed
我正在为机器人控制器编写一个数据记录解析器,从数据日志中得到的是一个0到65535范围内的数字(如果我没有记错的话,这是一个16位无符号整数)。我正在尝试将其转换为带符号的16位整数以显示给用户(因为这是记录器更改之前的实际数据类型)。
有人可以帮我一把吗?
示例:
值应该是什么 (0,-1,-2,-3,-4)
价值观是什么 (0,65535,65534,65533,65532)
答案 0 :(得分:12)
您是否尝试过显式投射?
UInt16 x = 65535; var y = (Int16)x; // y = -1
答案 1 :(得分:1)
在此处使用 unchecked 可避免在 [X] Check for Arithmetic Overflow 开启时发生崩溃:
unchecked
[X] Check for Arithmetic Overflow
UInt16 x = 65535; Int16 y = unchecked((Int16)x);
答案 2 :(得分:-3)
或者像这样
检查是否UI16>32767,如果是,I16=UI16-65536,否则=UI16
UI16>32767
I16=UI16-65536
UI16