加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 将unsigned解释为已签名

发布时间:2020-12-16 04:51:45 所属栏目:百科 来源:网络整理
导读:我正在研究嵌入式平台(ARM),在处理位模式时必须小心.让我们假装这条线超出了我的影响力: uint8_t foo = 0xCE; // 0b11001110 解释为无符号,这将是206.但实际上它是签名的,因此类似于-50.如何继续使用此值作为签名? int8_t bar = foo; // doesn't work 两者
我正在研究嵌入式平台(ARM),在处理位模式时必须小心.让我们假装这条线超出了我的影响力:
uint8_t foo = 0xCE;          // 0b11001110

解释为无符号,这将是206.但实际上它是签名的,因此类似于-50.如何继续使用此值作为签名?

int8_t bar = foo;            // doesn't work

两者都没有(导致所有输入值的0x10或0x00)

int8_t bar = static_cast<int8_t>(foo);
int8_t bar = reinterpret_cast<int8_t&>(foo);

我只是希望这些位保持不变,即. (bar == 0xCE)

反之亦然我感兴趣的是如何将代表负数的位模式转换为无符号变量而不会弄乱位模式.我正在使用GCC.

解决方法

以下对我来说很好,因为它应该如评论所说,这是实现定义的:
int x = (signed char)(foo);

在C中,您还可以说:

int x = static_cast<signed char>(foo);

请注意,促销始终会在重新解释位模式之前尝试保留该值.因此,您首先必须转换为与无符号类型相同大小的签名类型,以强制进行签名重新解释.

(当我尝试将字符作为十六进制数字对打印时,我通常面临相反的问题.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读