1

我只是想知道这是如何工作的,并且要弄清楚它是否真的有效。

如果您有一个 32 位 int 和一个大小为 4 的 8 位 int 数组。您能否将 32 位 int 分配给 8 位 int 数组中的第 0 个索引,并且有效地具有相同的值,按位计算。另外,如果您想将其转换回来,我认为您可以用数组和适当的位移位填充 32 位 int。

int32 bigVbl   = 20;
int8  smallVbl[4];

smallVbl[0] = bigVbl;

我希望 smallVbl 数组能够容纳整个 bigVbl。

4

2 回答 2

0

赋值总是截断最高有效位并保留 LSB。如果结果溢出,其他算术运算也会截断结果。通过这种方式,您可以扩展数学(和许多其他操作)以轻松地对大整数进行操作。如果没有截断,你怎么能把 32 位塞进 8 位呢?

要将 32 位 int 复制到 4 个 8 位字符的数组中,最简单的方法是将整数复制到数组中。另一种方法是逐元素分配

smallVbl[0] = bigVbl & 0xff; // the & 0xff is not really needed
smallVbl[1] = (bigVbl >> 8) & 0xff;
smallVbl[2] = (bigVbl >> 16) & 0xff;
smallVbl[3] = (bigVbl >> 24) & 0xff;
于 2013-12-19T14:03:54.757 回答
0

有几种方法可以做到这一点,最简单的可能是std::copy_n将整数复制到数组中:

std::copy_n(reinterpret_cast<int8*>(&bigVbl),           // Source to copy from
            std::min(sizeof(smallVbl), sizeof(bigVbl)), // Number of bytes to copy
            smallVbl);                                  // Destination to copy to

要复制相反的方向,只需在上述调用中切换源和目标的位置。

于 2013-12-19T11:52:28.647 回答