为数组中的 unsigned char 分配一个 short 的结果是啥?
Posted
技术标签:
【中文标题】为数组中的 unsigned char 分配一个 short 的结果是啥?【英文标题】: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] 范围内。仅当原始(有符号)值以二进制补码表示时,这两个操作才相同。 【参考方案1】:这能达到你想要的吗?好吧,我可以假设四种途径之一,因为你没有告诉我们你想要什么(抱怨)。
-
您希望将
short
值分配给uint8_t
,而不进行有符号到无符号的转换。在这种情况下,您必须确保旧值在uint8_t
:assert(old_value >= 0 && old_value <= 255);
的范围内。如果这一点描述了您想要的行为并且该断言失败,那么不,您的代码没有按照您的意愿行事。
您想为uint8_t
分配一个可能为负数或超出范围的short
值,并且您看不到他评论中描述的缩减过程R 存在问题。如果这一点描述了您想要的行为,那么是的,您的代码可以满足您的需求。
您想为uint8_t
分配一个可能为负或超出范围的short
值,而他的评论中描述的缩减过程R 对您不起作用,但您已准备好表达自己的缩减代码中的算法。如果这一点描述了您想要的行为,那么不,您还没有表达您的自定义缩减算法。
您希望将一个可能为负数或超出范围的short
值分配给uint8_t
,并且您不希望减小该值。在这种情况下,uint8_t
不合适。选择其他类型。
【讨论】:
以上是关于为数组中的 unsigned char 分配一个 short 的结果是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中将 unsigned char (byte) 数组转换为 unsigned short
ARDUINO 中将一个unsigned char 的数组的数据转化为一个long 型的数