我有一种情况需要将unsigned char(0-255)转换为signed char(-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编译器那样自动将操作数提升为int(参见the manual,第2.7.1节),这可能是问题的一部分。
我写的应用程序基本上是这样的:
ConvertSigned(n)
ConvertUnsigned(n)
将其转换回电机的无符号字符(与操纵杆相同的范围,但文档明确指出中心值为127)。答案 0 :(得分:2)
我想你想要:
unsigned char ConvertUnsigned(char n) {
return (int)n + 128;
}
char ConvertSigned(unsigned char n) {
return (int)n - 128;
}
假设“127转换为0”是一个错字。