全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 2229|回复: 22
打印 上一主题 下一主题

彻底陷入困境了,谁懂pack和unpack?

[复制链接]
跳转到指定楼层
1#
发表于 2015-4-30 00:25:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
就是dht,用php来写,由于接收到的node数据是struct结构体,需要对其进行解码
现在已经能够解出nid和ip,但是端口总是出错,郁闷死。。。

在协议中,要求的是端口为2字节,我使用unpack来解,n, s, S, v全部错误,最简单的,正确端口是35765,但解出来却变成了n:46422,s:22197,S:22197,v:22197

求救啊,谁知道要怎么做呢?
23#
 楼主| 发表于 2015-5-1 09:36:08 | 只看该作者
codegear 发表于 2015-4-30 19:48
估计lz遇到了大小端的问题。
网络序和主机序在一般的电脑上是颠倒的。

额,不是的,已经确认了,是我截取那26个字节时截取错误了。。。
22#
发表于 2015-4-30 19:48:39 | 只看该作者
估计lz遇到了大小端的问题。
网络序和主机序在一般的电脑上是颠倒的。

所以网络上给的 AB CD EF 12, 直接unpack会被识别成0x12EFCDAB。
21#
 楼主| 发表于 2015-4-30 18:57:25 | 只看该作者
onlybird 发表于 2015-4-30 18:28
感觉只要读取2字节的端口信息后 进行16转到10进制操作就行了

不是的。。。。
20#
 楼主| 发表于 2015-4-30 18:52:12 | 只看该作者
0000000 发表于 2015-4-30 17:43
不知道你是怎么分的.

现在解决了,发现貌似是我截取26个字节的时候有点问题,没截取正确还是怎么滴。。。
19#
发表于 2015-4-30 18:28:56 来自手机 | 只看该作者
感觉只要读取2字节的端口信息后 进行16转到10进制操作就行了
18#
发表于 2015-4-30 17:57:31 | 只看该作者
全球代码交流论坛
17#
发表于 2015-4-30 17:43:27 | 只看该作者
带头盔滴衰锅 发表于 2015-4-30 12:31
不行,获取不到,把两个字节分开来计算就出错了。。。

不知道你是怎么分的.
16#
 楼主| 发表于 2015-4-30 12:31:13 | 只看该作者
0000000 发表于 2015-4-30 10:05
文本型的你就可以用文本读
短整数 2个字节 是整数 用文本读就错了.
你可以拿到字节1 字节2 进行计算一下  ...

不行,获取不到,把两个字节分开来计算就出错了。。。
15#
 楼主| 发表于 2015-4-30 10:08:42 | 只看该作者
0000000 发表于 2015-4-30 10:06
还有一种方式 python在输出的时候 把端口转换为文本字符串
这样你用文本读就没问题了.
但是字节数量就不 ...

恩,明白了,回家试试一个字节一个字节的读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-1-12 09:44 , Processed in 0.065597 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表