考虑我有两个无符号数,每个32位,保存在一个数组中。第一个数字包含在[0; 3]和第2位置[4; 8]。我现在改变其中一个数字的值,是下面的代码允许/有问题吗?
return eval(str(number)[::-1])
答案 0 :(得分:1)
您可能无法使用指向uint8_t
的指针访问uint32_t
数组。这违反了the strict aliasing rule(反之亦然 - 如果uint8_t
是字符类型)。
相反,您可能希望使用" type punning"来规避C(C99及以上)类型系统。为此,您使用union
与相应类型的成员:
union TypePunning {
uint32_t the_ints[2];
uint8_t the_bytes[2 * sizeof(uint32_t)];
}
// now e.g. write to the_bytes[1] and see the effect in the_ints[0].
// Beware of system endianness, though!