【发布时间】:2020-11-04 12:24:50
【问题描述】:
我正在编写一个通过网络侦听 UDP 数据包并解析它们的 go 应用程序。
udp 数据包是用 C 语言编写的,结构定义(根据他们的文档)如下所示。 (请理解 C 和一般网络的新手)
typedef struct foo
{
int code;
char seg[10];
char sym[25];
short type;
long amtToday;
long price;
...etc
} foo;
一个示例网络数据包如下所示
[233 3 0 0 99 100 101 95 102 111 0 0 0 0 55 52 51 57 0 69 69 68 49 48 50 48 74 65 78 50 48 50 49 0 0 58 254 127 0 0 1 0 166 58 254 127 0 0 255 255 255 255 255 255 255 255 32 232 141 0 0 0 0 0 0 135 166 58 254 127 0 0 ... etc]
简而言之,我无法在 sym 字段之后获取正确的值。
我阅读了一些关于 C 中的结构对齐的信息,并猜测我忽略了填充值。但是我对填充发生的位置有点困惑
是这个
typedef struct foo
{
int code;
char seg[10];
**char pad[6];**
char sym[25];
**char pad[7];**
short type;
long amtToday;
long price;
...etc
} foo;
即在每个 char 字段之后添加填充
还是更像这样
typedef struct foo
{
int code;
char seg[10];
char sym[25];
**char pad[1];**
short type;
long amtToday;
long price;
...etc
} foo;
问题是我无法确定其中任何一个是否正确。我需要在确认之前解析整个结构 - 但由于填充问题而无法这样做
还是我在解析这个数据包时走错了方向?
【问题讨论】:
标签: c binary-data