![]() |
1
6
正确的方法是使用memcpy:
参见示例: https://gcc.godbolt.org/z/l5Px4G . 在gcc for x86和arm之间切换编译器,并查看指令中的差异。
|
![]() |
2
3
不,你不应该。将非对象大小倍数的偏移量添加到指向已分配对象的指针中,可能会导致平台无法取消引用的指针。很简单
不
无论如何,移位和加法都是非常清楚和容易理解的。强制转换比较混乱,需要理解平台的字节顺序。所以你没有让事情变得更好,更简单,更清晰。 |
![]() |
3
3
不,没有哪个演员能保证成功。 请注意,整数有许多表示形式。如何将字节数组转换为整数对象取决于整数在数组中的表示方式。例如,如果整数转换为字节数组并通过网络发送,则无法知道接收计算机是否使用相同的表示形式。 一个需要考虑的问题是如何表示负数。幸运的是,2的补码是如此普遍的表示,我们通常可以忽略这一点。不过,在您的例子中,这更不重要,因为您要转换一个无符号整数。 一个更相关的考虑是字节终结性。
如果知道数组与执行程序的CPU使用的表示形式相同,那么可以使用
只要源数据在相同的表示形式中,无论CPU使用的endianness是什么,这都可以正常工作。
你的建议
这种方法在通过网络接收数据时非常有用,因为它不依赖于与执行CPU相同的表示。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |