【问题标题】:Preferable method for reading N bytes from a file, then convert to an integer从文件中读取 N 个字节,然后转换为整数的首选方法
【发布时间】:2014-10-07 05:27:37
【问题描述】:

我正在尝试编写一个简单的磁盘访问函数,如下所示,但无法确定合适的;将缓冲区转换为数据类型或逐字节执行一些操作。将来我打算让它对字节序更友好,那么选择什么? 首选的任何明显原因?

#include <pstdint.h>

...

uint16_t file_read_int8(FILE* fp) {
   char buffer[2];
   fread(buffer,1,2,file);

   // this?
   return *((uint16_t *)buffer);

   // or this?
   return buffer[0] | (buffer[1]<<8);
}

【问题讨论】:

  • 两者都不会正常工作。而是使用类似 char buffer[3] = {0}' ... return atoi( buffer );

标签: c file fread


【解决方案1】:

两者都可以。第一个假设使用相同的架构来读取和写入文件(大端与小端)。第二个没有做出这个假设——它假设小端(Intel)格式。第一个选项可能更快,这取决于您的优化器有多好(或不是)。我认为第二个是首选,因为它应该适用于任何架构,因此允许文件格式是“跨平台”的——这意味着任一架构都可以创建文件,并且任一架构都可以读取文件。

【讨论】:

  • 谢谢。所以你说无论cpu的架构如何,铸造都可以工作?
  • 没关系前面的评论;)我也更喜欢第二个,因为它可以操纵字节。所以使用字节是最安全的方式,谢谢
猜你喜欢
  • 2017-04-14
  • 1970-01-01
  • 2020-06-12
  • 2015-05-17
  • 2023-01-18
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多