You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中unpack('!6s6sH', bytes())参数含义及作用说明

struct.unpack('!6s6sH', bytes(eth_header))格式参数详解

这行代码是Python标准库struct模块用于解析以太网帧头的典型用法,格式字符串!6s6sH的每段含义拆分如下:

  • !:字节序标识,指定按照**网络字节序(大端序)**解析二进制数据。所有网络协议传输的二进制数据默认采用大端序,加这个标识可以避免不同主机自身字节序差异导致的解析错误。
  • 第一个6s:表示连续读取6字节长度的原始字节串,对应以太网帧头的第一个字段——目的MAC地址,MAC地址固定为6字节长度,s类型不会将数据转为整数,会直接返回bytes类型值。
  • 第二个6s:同样读取6字节长度的原始字节串,对应以太网帧头的第二个字段——源MAC地址。
  • 末尾的H:表示读取2字节长度的无符号短整型数,对应以太网帧头的第三个字段——帧类型,解析后会直接返回整数,比如值为2048(对应十六进制0x0800)时代表上层是IPv4协议,值为2054(0x0806)时代表上层是ARP协议。

总长度校验:整个格式串对应的解析总长度为6+6+2=14字节,正好匹配标准以太网帧头的固定长度,执行unpack后会返回一个长度为3的元组,顺序对应「目的MAC字节串、源MAC字节串、帧类型整数」。

示例返回值参考:

import struct
# 模拟14字节以太网帧头
mock_eth_header = b'\xaa\xbb\xcc\xdd\xee\xff\x11\x22\x33\x44\x55\x66\x08\x00'
result = struct.unpack('!6s6sH', mock_eth_header)
# 输出结果:(b'\xaa\xbb\xcc\xdd\xee\xff', b'\x11\x22\x33\x44\x55\x66', 2048)

内容的提问来源于stack exchange,提问作者D-LA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:54:15