我正在尝试为磁盘访问编写一个简单的函数,如下所示,并且无法确定适当的;将缓冲区转换为数据类型或逐位逐位执行。在未来,我打算让它更具有对于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);
}
答案 0 :(得分:1)
要么可以工作。第一个假定使用相同的架构来读取和写入文件(big-endian与little-endian)。第二个没有做出这个假设 - 它采用little-endian(Intel)格式。第一个选项可能更快,具体取决于您的优化器有多好(或者不是)。我认为第二个是首选的,因为它应该适用于任何架构,因此允许文件格式为跨平台&#34; - 意味着任一架构都可以创建文件,并且任一架构都可以读取文件。