我只是想知道它是如何工作的,并清楚它是否确实有效。
如果你有一个32位的int和一个大小为4的8位int数组。你可以将32位int分配给8位int数组中的第0个索引,并且有效地具有相同的值。 此外,如果你想将其转换回来,我认为你可以用数组和适当的位移来填充32位int。
int32 bigVbl = 20;
int8 smallVbl[4];
smallVbl[0] = bigVbl;
我希望smallVbl数组能够保存整个bigVbl。
答案 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;