【发布时间】:2011-09-25 14:14:09
【问题描述】:
我正在使用一些嵌入式硬件,即 Rabbit SBC,它使用 Dynamic C 9。
我正在使用微控制器通过其中一个串行端口从数字罗盘传感器读取信息。
传感器使用单个有符号字节将值发送到微控制器。 (-85 到 85)
当我收到这些数据时,我会将其放入 char 变量中
这适用于正值,但是当传感器开始发送负值时,读数会跳到 255,然后又回到 0。我想这是因为最后一位用于确定负值/positive,并且正在扭曲真实值。
我最初的想法是将我的数据类型更改为signed char。
但是,我遇到的问题是,我使用的微控制器上的 Dynamic C 版本本身不支持带符号的字符值,只支持无符号的。
我想知道是否有办法将我收到的数据手动转换为有符号值?
【问题讨论】:
-
有符号和无符号值都只是一堆位,是您的解释使它们有符号或无符号。例如,如果您的硬件产生 2 的补码,如果您读取 0xff,您可以将其解释为 -1 或 255,但它们实际上是相同的数字。
-
@Shahbaz:这不是真的。符号位会影响移位操作,以及任何转换为更大类型的操作。
-
你不能把它转换成
int(假设这个编译器有一个签名的int)。这个平台有 gcc 端口吗? -
所以你有一个非 C 语言的编译器,但看起来像它。您获得的任何 C 答案都可能对您的编译器无效。有没有办法让你的编译器成为 C 编译器?还是让您获得另一个编译器?
-
@Shahbaz:你敢打赌它会影响变速!如果它是负数并且你右移,它会将符号位保持在正确的位置。