首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发送以太网数据包时额外的填充?

发送以太网数据包时额外的填充?
EN

Stack Overflow用户
提问于 2017-04-18 19:29:57
回答 1查看 138关注 0票数 1

我在写一段代码把一个包发送到另一个mac地址。我可以使用一个结构来创建一个包,如下所述:

代码语言:javascript
复制
typedef struct vlink_prm_in_s
{
vlink_header_t  header;
uint32_t        address;
uint16_t        length;
}vlink_prm_in_t;

当我想发送数据包时,我执行以下步骤:

代码语言:javascript
复制
  vlink_prm_in_t g_pkt;
  g_pkt.header.verCmd = 0x43;
  g_pkt.header.reverseVerCmd = ~(g_pkt.header.verCmd);
  g_pkt.address = 0x11111111;
  g_pkt.length = 0x2222;
  memcpy(sendbuf+headerLen, &g_pkt, sizeof(g_pkt));
  printf("%x\n", sendbuf[headerLen+4] );
  payloadLen = sizeof(g_pkt);
  sendbuf[headerLen+payloadLen] = 0xA5;
  payloadLen++;

当我发送数据包时,当我在WireShark中跟踪它时,我会得到以下数据包:

aa bc dd ee 66 98 ee cb 03 be 1d ea e8 43 bc 00 00 11 11 11 22 22 00 a5

我不知道从哪里可以得到这些额外的零(突出显示)?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-20 00:36:21

在更多地查看互联网之后,我发现结构应该是纯粹的递增或递减顺序(或者所有变量都应该是相同大小的)。这样你就可以去掉多余的零了。因此,我做了如下:

代码语言:javascript
复制
typedef struct vlink_prm_in_s
{
vlink_header_t  header;
uint16_t        address1;
uint16_t        address2;
uint16_t        length;
}vlink_prm_in_t;

这解决了我的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43480676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档