C:将二进制文件读入struct

Ken*_*ihe 5 c ip struct file readfile

在下面解决

我正在编写IP转发程序,并试图读取标头数据。

我有不同行的结构,例如第一行:

struct line1 {
  char a; //version
  char b; //header length
  unsigned short c; //datagram length
};
Run Code Online (Sandbox Code Playgroud)

不同的数据类型取决于数据字段的长度。

我有变量初始化:

struct line1 l1 = {};
FILE *ip_packets, *routing_table;
Run Code Online (Sandbox Code Playgroud)

我的教授展示了一个简单的读取功能,该功能类似于read(ip_packets, 4, l1) (4个字节),可自动将数据放入struct字段中。我已经在网上搜索过,还没有找到像这样的简单方法。我在寻找什么读取功能?

我已经尝试fscanf过这种方式:

  if (fscanf(ip_packets, "%c %c %hu", &l1.a, &l1.b, &l1.c)){
    printf("%c\n", l1.a);
    printf("%c\n", l1.b);
    printf("%hu\n", l1.c);
  }
Run Code Online (Sandbox Code Playgroud)

我也尝试过语法%c,%c,%hu%c/%c/%hu

但这只是打印:

Kendalls-Mac-mini:Programming 2 kendallweihe$ ./ip_read
E

0
Run Code Online (Sandbox Code Playgroud)

原来我正确地读取了它,但是我需要打印整数值。我的测试验证是以整数表示的。很简单。

更好的解决方案

fread(&l1, 4, 1, ip_packets);
Run Code Online (Sandbox Code Playgroud)