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

Python中如何使用struct库打包IPv6地址及多类型混合数据

解决方案

你需要将IPv6文本地址先转换为16字节的二进制格式,再使用16s作为格式符完成打包,具体说明如下:

  • 没有直接匹配IPv6文本字符串的C类型格式符,必须先使用socket模块的inet_pton方法把IPv6文本串转为16字节原生二进制地址,不能直接把IPv6文本字符串传入struct.pack,否则得到的是文本的ASCII编码值,不是标准IPv6二进制地址格式。
  • 格式串中的?需要替换为16s,该格式符表示匹配长度为16的字节序列,刚好符合IPv6地址16字节的长度要求。
  • 如果需要避免结构体默认字节对齐产生的填充字节,建议在格式串开头添加字节序标识:
    • ! 代表网络字节序(大端),适合网络传输场景
    • < 代表小端字节序,适合本机小端设备使用场景

完整示例代码

import struct
import socket

Value1 = 0
Value2 = 3.10
IPv6_text = '2001::1'

# 将IPv6文本转为16字节二进制地址
ipv6_bin = socket.inet_pton(socket.AF_INET6, IPv6_text)
# 定义格式串,网络字节序下总长度为4+4+16=24字节
pack_format = '!i f 16s'

# 执行打包
package = struct.pack(pack_format, Value1, Value2, ipv6_bin)

内容的提问来源于stack exchange,提问作者Wyrox51

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:54:00