首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stack.pack()或socket.ntohl()将4 8Byte转换为8 stack.pack

stack.pack()或socket.ntohl()将4 8Byte转换为8 stack.pack
EN

Stack Overflow用户
提问于 2014-03-26 15:31:46
回答 1查看 246关注 0票数 0

我想向服务器发送请求,但是Python以某种方式将4字节值转换为8字节值:

代码语言:javascript
复制
struct.pack("H",  socket.ntohs(v1)) + struct.pack("?",  v2) +               struct.pack("?",  v3) + struct.pack("L", socket.ntohl(v5)) +   struct.pack("L", socket.ntohl(v6)) +  struct.pack("L", socket.ntohl(v7)) + struct.pack("L", socket.ntohl(v8)) + struct.pack("H", socket.ntohs(v9))

直到v5,一切都很好,但是在v5之后,我总是得到8字节的值,而不是4 4Bytes。Wireshark捕获:高达0003 e8,一切正常:

代码语言:javascript
复制
0040  4d 65 01 00 00 00 01 00  00 01 01 00 00 03 e8 00   Me...... ........
0050  00 00 00 00 00 07 d0 00  00 00 00 00 00 0b b8 00   ........ ........
0060  00 00 00 00 00 0f a0 00  00 00 00 13 88 00 00 00   ........ ........
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-26 15:46:00

由于不指定其他方法,所以您使用的是long的本机表示形式。尝试添加=说明符(本机字节顺序,标准大小):

代码语言:javascript
复制
struct.pack("=H??LLLLH",  
            socket.ntohs(v1),
            v2,
            v3,
            socket.ntohl(v5),
            socket.ntohl(v6),
            socket.ntohl(v7),
            socket.ntohl(v8),
            socket.ntohs(v9))

参考文献:

  • http://docs.python.org/3/library/struct.html#byte-order-size-and-alignment
  • http://docs.python.org/3/library/struct.html#format-characters
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22665833

复制
相关文章

相似问题

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