gpt4 book ai didi

c - 手动转换签名的字符

转载 作者:太空狗 更新时间:2023-10-29 17:07:23 26 4
gpt4 key购买 nike

我正在使用一些嵌入式硬件,一个使用 Dynamic C 9 的 Rabbit SBC。

我正在使用微 Controller 通过其串行端口之一从数字罗盘传感器读取信息。

传感器使用单个有符号字节将值发送到微 Controller 。 (-85 到 85)

当我收到这些数据时,我将其放入一个 char 变量中

这对于正值工作正常,但是当传感器开始发送负值时,读数跳到 255,然后又下降到 0。我认为这是因为最后一位被用来确定负值/positive,并且正在扭曲真实值。

我最初的想法是将我的数据类型更改为 signed char

但是,我遇到的问题是我使用的微 Controller 上的 Dynamic C 版本本身不支持带符号的 char 值,只支持无符号的。

我想知道是否有办法将我收到的数据手动转换为有符号值?

最佳答案

你只需要拿出你的引用书,看看你的 Controller 是如何表示负数的。剩下的只是打字。

例如2的补码表示取值mod 256,那么你只需要调整模数就可以了。

int signed_from_unsignedchar(unsigned char c)
{
int result = c;
if (result >= 128) result -= 256;
return result;
}

One's complement更简单:你只需翻转位即可。

int signed_from_unsignedchar(unsigned char c)
{
int result = c;
if (result >= 128) result = -(int)(unsigned char)~c;
return result;
}

sign-magnitude通过设置高位来表示负数,所以只需要清位取反即可:

int signed_from_unsignedchar(unsigned char c)
{
int result = c;
if (result >= 128) result = -(result & 0x7F);
return result;
}

关于c - 手动转换签名的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546051/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com