【发布时间】:2014-11-03 00:08:43
【问题描述】:
我遇到需要将无符号字符 (0-255) 转换为有符号字符 (-128-127) 的情况。我希望将 0 转换为 -128,将 127 转换为 0,将 255 转换为 127。
我目前正在使用此代码来执行此操作(即使它不会完全保留范围):
unsigned char ConvertUnsigned(char n) {
return n + 127;
}
char ConvertSigned(unsigned char n) {
return n - 127;
}
此代码似乎正在获取所有值并将它们转换为 255,但我无法验证这一点(见下文)。
我正在使用 MPLAB C18 编译器为 Vex PIC 微控制器(具有 Microchip PICmicro PIC18F8520)编写此代码。我不知道代码实际上在做什么,因为我没有调试器或任何其他方式与芯片上的代码进行通信。
该编译器仅支持 C89,并且不会像普通 C 编译器那样自动将操作数提升为整数(请参阅the manual,第 2.7.1 节),这可能是问题的一部分。
更新
我正在编写的应用程序基本上是这样的:
- 获取一个代表操纵杆轴的无符号字符(255 = 完全向前,0 = 完全向后,中心 = ~127/128 [文档没有说明具体是什么])
- 使用
ConvertSigned(n)将其转换为字符 - 做一些数学计算来计算电机速度(我已经取消了这一步进行测试)。
- 使用
ConvertUnsigned(n)将其转换回电机的无符号字符(与操纵杆的范围相同,但文档明确指出中心值为 127)。
【问题讨论】:
-
127 转换为 0?你确定吗?你不是说128?
-
@KerrekSB 我更新了这个问题来解决这个问题。我同意中心值为 127 似乎有点奇怪。不过,我认为 1 的差异对我来说并不重要。
-
为什么所有的反对票?