从文件读取N个字节,然后转换为整数的优选方法

时间:2014-10-07 05:27:37

标签: c file fread

我正在尝试为磁盘访问编写一个简单的函数,如下所示,并且无法确定适当的;将缓冲区转换为数据类型或逐位逐位执行。在未来,我打算让它更具有对于endianess的友好性,那么选择什么呢?任何明显的原因导致其中一个首选

#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);
}

1 个答案:

答案 0 :(得分:1)

要么可以工作。第一个假定使用相同的架构来读取和写入文件(big-endian与little-endian)。第二个没有做出这个假设 - 它采用little-endian(Intel)格式。第一个选项可能更快,具体取决于您的优化器有多好(或者不是)。我认为第二个是首选的,因为它应该适用于任何架构,因此允许文件格式为跨平台&#34; - 意味着任一架构都可以创建文件,并且任一架构都可以读取文件。