[英]How do I write the 4 bytes of an int32_t to a binary file in big-endian order in C?
[英]Reading a 4 bytes date (big endian) from binary file
我尝试从二进制文件中读取一个4字节的日期编码(大端)。
我做:
char date[4];
long seconds;
s = read(fd, date, sizeof(char) * 4);
seconds = (date[3]<<0) | (date[2]<<8) | (date[1]<<16) | (date[0]<<32);
printf("%s\n", ctime(&seconds));
但是我得到:
Thu Jan 1 00:59:27 1970
我的代码有什么问题? 谢谢。
(date[0]<<32);
看起来错了。 16 + 8
是24
而不是32
。
您可以使用ntohl(3)
降低代码复杂度:
#include <arpa/inet.h>
/* ... */
uint32_t date;
s = read(fd, &date, sizeof(date));
seconds = ntohl(date);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.