免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1824 | 回复: 6
打印 上一主题 下一主题

请问如何对比 unpack出来的变量? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-22 18:50 |只看该作者 |倒序浏览
学python第二天,对不住了..


a=b'\x12\x23\x56\x78'

.......
#从网络读一个数据包
data,addr = s.recvfrom(4)

我想对比data和a是不是相等,请问该咋弄呢?

谢谢

论坛徽章:
0
2 [报告]
发表于 2013-03-24 22:32 |只看该作者
if a == data:
    print('equal')
else:
    print('Not equal')

论坛徽章:
0
3 [报告]
发表于 2013-03-25 11:33 |只看该作者
3q,  再追加点..
如果我的包头大于4呢。 比如整个包 100个字节

a=b'\x12\x23\x56\x78'

.......
#从网络读一个数据包
data,addr = s.recvfrom(100)

#我用 struct.unpack

header, payload = struct.unpack("!I96S")
这样
header 如何判断是否等于 a呢? 谢谢




论坛徽章:
0
4 [报告]
发表于 2013-03-26 09:13 |只看该作者
你最好把你的具体情况说清楚点 我可以直接给你代码或者思路 你这么问 我都不好回答你了 呵呵

论坛徽章:
0
5 [报告]
发表于 2013-03-26 11:29 |只看该作者
回复 4# rApeNB

多谢,我后来看了看别人的代码,知道咋弄了。。不过又有点新问题..



还想请教个问题。
python的字符串是不是不已‘\0’结尾的啊?它里面专门有个变量标识str的长度?
我发现用unpack("100s" ....   解出来的string, 尽管他strlen的长度可能只有几个,但是后面的 \x00这样的空字符也被算到 len里了, 这样我遇到一个问题,就是string.ljust的时候他会调整出错,请问有啥办法能让他以\0结尾呢? 谢谢

论坛徽章:
0
6 [报告]
发表于 2013-03-26 13:23 |只看该作者
回复 5# yqzq


    python不同c++,str不以空字符结尾。 你后面的说的,我觉得不怎么对。不过可能大致明白你想干什么。

给点建议:  首先python2跟3里面的struct模块有细微变化。 然后仔细看看struct模块的文档。

看你最后说的,是要打印输出的。做到格式化输出。不建议你用string.ljust

可以用python的格式化输出方式。

如:print '%02s' % 2 这种方式适应python2 & 3  不过注意 print在3里面 是函数

print('{:<2}'.format(2))  python3新增的

论坛徽章:
0
7 [报告]
发表于 2013-03-26 15:15 |只看该作者
回复 6# rApeNB


    非常感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP