c - 操纵变量的地址来存储较小的类型?

标签 c sanity-check sane

这就是我用高级编程语言宠爱自己的结果。


我有一个函数,可以将 32 位值写入缓冲区,并将 uint64_t 写入堆栈。下面的代码是一种合理的存储方式吗?

uint64_t size = 0;
// ...
getBytes((uint32_t*)&size+0x1);

我假设这将是规范的、安全的风格:

uint64_t size = 0;
// ...
uint32_t smallSize;
getBytes(&smallSize);
size = smallSize;

最佳答案

没有。它只能在大端机器上正常工作。假设一个特定的字节顺序——甚至没有先检查它——是不明智的。

即使您确定您的程序现在只能在大端机器上运行,您也永远不会知道它将来是否必须在小端机器上运行。 (我在一家使用大端处理器数十年的公司生产的计算机上写这篇文章,然后在几年前切换到小端处理器,现在在某些设备中使用双端处理器也非常成功;- ))

关于c - 操纵变量的地址来存储较小的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2993063/

相关文章:

arrays - 如何让 VBA 子程序调用一个函数,该函数将数组传递给子程序中的另一个函数

django - model.save() 在加载 Django fixtures 时没有被调用?

c++ - sane_control_option - 无法设置选项

c++ - 如何使用 zlib.h 解压缩 m MYSQL_RES 中的 COMPRESSED BLOB,而不在 mysql 查询中使用 UNCOMPRESS

c - read() 系统调用会复制数据而不是传递引用

c - 如何在c中定义 '\n'之后的空格数

c - 从字符串数组中搜索字符串

c++ - 在 GLSL(330 或其他)中,什么会导致统一结构的行为不同于可变结构?