以下解决
我正在编写IP转发程序而我正在尝试读取标头数据。
我为第一行设置了不同的行,例如:
struct line1 {
char a; //version
char b; //header length
unsigned short c; //datagram length
};
不同的数据类型取决于数据字段的长度。
我有变量初始化:
struct line1 l1 = {};
FILE *ip_packets, *routing_table;
我的教授展示了一个简单的读取函数,它类似于read(ip_packets, 4, l1)
(4字节),可以自动将数据放入结构字段中。我在网上搜索过,并没有找到这样一个简单的方法。我正在寻找什么阅读功能?
我以这种方式试过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);
}
我还尝试过syntaxt %c,%c,%hu
或%c/%c/%hu
但这只是打印:
Kendalls-Mac-mini:Programming 2 kendallweihe$ ./ip_read
E
0
解
原来我正在读它,但我需要打印整数值。我的测试验证是按整数计算的。很容易。
更好的解决方案
fread(&l1, 4, 1, ip_packets);