在 Python 中从字节字符串中删除前 20 个字节的最快方法是啥?

Posted

技术标签:

【中文标题】在 Python 中从字节字符串中删除前 20 个字节的最快方法是啥?【英文标题】:What's the quickest way to cut the first 20 bytes out of a byte string in Python?在 Python 中从字节字符串中删除前 20 个字节的最快方法是什么? 【发布时间】:2016-04-18 03:40:15 【问题描述】:

我正在使用 TCP 协议将数据包从发送方传递到接收方。我需要能够将标题与填充我的“数据包”的内容分开。

我的标题是这样包装的

tcp_header = pack('!HHLLBBH', tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags,
                          tcp_window) + pack('H', tcp_check) + pack('!H', tcp_urg_ptr)

那么我的包是这样构造的

packet = tcp_header + user_data

我是这样解压的

(tcp_source, tcp_dest, tcp_seq, tcp_ack_seq, tcp_offset_res, tcp_flags,\
             tcp_window, tcp_check, tcp_urg_ptr) = unpack('!HHLLBBHHH', sent_packet)

但它只有在我单独发送标头时才有效。解包前如何从头部拆分内容?

谢谢

【问题讨论】:

【参考方案1】:

你要找的函数struct.unpack_from

struct.unpack_from('!HHLLBBHHH', sent_packet)

【讨论】:

谢谢!。结合 struct.calcsize 让我走上正轨。

以上是关于在 Python 中从字节字符串中删除前 20 个字节的最快方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 语言中从列表元素中删除撇号

在 Python 中从字符串中删除辅音

在 Python 中从序列中删除项目的优雅方法? [复制]

iOS 9 无法在 iTunesConnect 中从审核中删除构建

如何在 C++ 中从字节数组(在 BIG-ENDIAN 中)中提取单个字段

在函数调用中从 %esp 中减去分配了多少空间?