我使用fread将一个长整型数据从二进制文件读入一个无符号字符缓冲区。
现在我想要获取这个长整型数据。我该如何做?
unsigned char buffer[sizeof(long)];
fread(buffer, sizeof(long), 1, my_file);
谢谢!
我使用fread将一个长整型数据从二进制文件读入一个无符号字符缓冲区。
现在我想要获取这个长整型数据。我该如何做?
unsigned char buffer[sizeof(long)];
fread(buffer, sizeof(long), 1, my_file);
谢谢!
long buffer;
fread(&buffer, sizeof(long), 1, my_file);
// will swap the byte order in little endian and not in big endian
long transform_standart_byte_order(long in) {
return (((unsigned long) ((char*) &in)[0] << 56) |
(((unsigned long) ((char*) &in)[1] << 48) |
(((unsigned long) ((char*) &in)[2] << 40) |
(((unsigned long) ((char*) &in)[3] << 32) |
(((unsigned long) ((char*) &in)[4] << 24) |
(((unsigned long) ((char*) &in)[5] << 16) |
(((unsigned long) ((char*) &in)[6] << 8) |
(((unsigned long) ((char*) &in)[7]);
}
void write_long(FILE* my_file, long val) {
val = transform_standart_byte_order(val);
fwrite(val, sizeof(val), 1, my_file);
}
long read_long(FILE* my_file) {
long val;
fread(&val, sizeof(val), 1, my_file);
return transform_standart_byte_order(val);
}