【问题标题】:C++ cast unsigned to signedC++ 将无符号强制转换为有符号
【发布时间】:2016-06-30 21:21:10
【问题描述】:

我试图复制this,但它无法编译。

unsigned char x = 0;
reinterpret_cast<signed char>(x);

它说

C:\Users\SXG5558\Documents\Arduino\sketch_jun30a\sketch_jun30a.ino: In function 'void setup()':

sketch_jun30a:3: error: invalid cast from type 'unsigned char' to type 'signed char'

     reinterpret_cast<signed char>(x);

                                    ^

exit status 1

编辑:

说清楚,我真的很想将内存中的位从有符号重新解释为无符号。我正在编写一个读取和写入未签名数据的 I2C 库,但我正在使用该库来控制已签名的传感器,因此我想重新解释转换实际数据。

【问题讨论】:

  • 你链接的例子有reinterpret_cast&lt;unsigned char&amp;&gt;(x);。注意&amp;
  • 您的问题标题不只是要求您的代码中显示的相反的投射方向吗?
  • 只需使用 nuke-it (signed char)x 演员表。
  • @πάνταῥεῖ 我编辑了标题以反映这一点
  • @pm100 C 风格的演员表是静态演员表,但我想要重新解释演员表

标签: c++ arduino reinterpret-cast


【解决方案1】:

来自cppreference.com的相关部分是

类型别名

当指向动态类型为 DynamicType 的对象的指针或引用被 reinterpret_cast(或 C 风格转换)到指向不同类型 AliasedType 对象的指针或引用时,转换总是成功,但生成的指针或引用可能只如果以下条件之一为真,则用于访问对象:

[...]

  • AliasedType 是 DynamicType 的(可能是 cv 限定的)有符号或无符号变体

[...]

即。您忘记了链接示例中的&amp;

【讨论】:

  • 我不敢相信我错过了。感谢您回答一个愚蠢的问题。
  • @Sam 实际上这不是一个愚蠢的问题。我需要一些时间来理解为什么没有 &amp; 就无法工作,但我仍然无法解释......
  • 我认为这样才能正确完成分配(例如reinterpret_cast&lt;uint8_t&amp;&gt;(x) = 10)。这就引出了一个问题,如果你不想要这个功能怎么办?如何在不将f() 的结果分配给临时变量的情况下强制转换reinterpret_cast&lt;uint8_t&amp;&gt;(f())
猜你喜欢
  • 2011-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多