为数组中的 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 型的数

unsigned char alloc 和免费问题

Windows C - 使用 MIDL 协议通过引用动态分配的 unsigned char 内存传递指针

将字符串变量分配给unsigned char变量

C语言中的unsigned char数组怎么转成unsigned short数组