gpt4 book ai didi

c - fwrite可移植性

转载 作者:行者123 更新时间:2023-12-02 02:13:28 26 4
gpt4 key购买 nike

fwrite 是可移植的吗?我并没有真正面对下面描述的问题,但我想了解 C 的基础知识。

假设我们有两台机器 A8(字节 = 8 位)和 B16(字节 = 16 位)。

下面的代码会在两台机器上产生相同的输出吗?

unsigned char[10] chars;
...
fwrite(chars,sizeof(unsigned char),10,mystream);

我猜想 A8 会产生 80 位(10 个八位位组)而 B16 会产生 160 位(20 个八位位组)。我错了吗?

如果仅使用 uintN_t 类型,则不会出现此问题,因为它们的位长度与字节大小无关。但也许 uint8_t 不会存在于 B16 上。

这个问题的解决方案是什么?

我想构建一个 uint32_t 数组,将我的字节放入这个数组中(根据机器的架构使用智能移位和掩码)并写入这个数组将解决问题。但这并不令人满意。再次假设 uint32_t 存在于所有平台上。这个数组的填充将非常依赖于当前机器的架构。

感谢您的回复。

最佳答案

fwrite() 是一个标准库函数。所以它必须对每个 C 编译器都是可移植的。也就是说,它必须在该编译器的 C 标准库中定义才能支持您的机器。

因此 8 位、16 位、32 位的机器为您提供相同的高级操作。

但是如果你想设计那些库函数,那么你必须考虑机器架构,机器的内存组织。

作为 C 编译器用户,您不应该为内部行为操心。

我想你只是想使用那些 C 库函数。因此,不同机器的功能行为没有差异。

关于c - fwrite可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11685185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com