【问题标题】:What's the result of assign a short to a unsigned char in an array?为数组中的 unsigned char 分配一个 short 的结果是什么?
【发布时间】:2013-03-23 02:02:46
【问题描述】:

我有一个短值(只能限制为 UINT8)并想将其分配给 UINT8(/unsigned char)。
但是我没有想到更好的选择,而是这样做:

unlatch.FaultBits.Value[0] = ui->lineEditFaultBits->text().toShort();

但是当我使用unlatch.FaultBits.Value[0] 时,这能达到我想要的吗? (Vaule[] 是结构体中的数组:UINT8 Value[64];

【问题讨论】:

  • 结果是把整数的低8位赋给字符。
  • 不确定你在担心什么,但我可以确认这不会破坏内存(不会改变 Value[1])。它会在分配之前简单地缩短值(取最低位字节)。
  • 它不“取最低位字节”。它将模 256 的值减小到 [0,255] 范围内。仅当原始(有符号)值以二进制补码表示时,这两个操作才相同。

标签: c++ c arrays char short


【解决方案1】:

这能达到你想要的吗?好吧,我可以假设四种途径之一,因为你没有告诉我们你想要什么(抱怨)。

  1. 您希望将short 值分配给uint8_t,而不进行有符号到无符号的转换。在这种情况下,您必须确保旧值在uint8_t:assert(old_value >= 0 && old_value <= 255); 的范围内。如果这一点描述了您想要的行为并且该断言失败,那么不,您的代码没有按照您的意愿行事。
  2. 您想为uint8_t 分配一个可能为负数或超出范围的short 值,并且您看不到他评论中描述的缩减过程R 存在问题。如果这一点描述了您想要的行为,那么是的,您的代码可以满足您的需求。
  3. 您想为uint8_t 分配一个可能为负或超出范围的short 值,而他的评论中描述的缩减过程R 对您不起作用,但您已准备好表达自己的缩减代码中的算法。如果这一点描述了您想要的行为,那么不,您还没有表达您的自定义缩减算法。
  4. 您希望将一个可能为负数或超出范围的short 值分配给uint8_t,并且您不希望减小该值。在这种情况下,uint8_t 不合适。选择其他类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 2015-01-03
    • 2017-05-07
    相关资源
    最近更新 更多