将大型变量分配给较小类型的数组

时间:2013-12-19 11:48:20

标签: c++ arrays int32 uint8t

我只是想知道它是如何工作的,并清楚它是否确实有效。

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

int32 bigVbl   = 20;
int8  smallVbl[4];

smallVbl[0] = bigVbl;

我希望smallVbl数组能够保存整个bigVbl。

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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;