0

这个问题对你们大多数人来说可能很容易,但到目前为止我找不到答案。

我正在构建一个像这样的网络数据包生成器:

class PacketHeader(Packet):
fields = OrderedDict([
    ("head", "\x00"),
    ("headpad", "\x00"),
    ("headlen", "\x1a\x00" ),
    ("presentflag", "\x2e"),
    ("timestamp", "\x43\x10\x58\x16\xa1\x01\x00\x00"),
    ("flag", "\x03"),
    ("Sequencenum", "\x04\x00"),

])

后来,我打电话给我的班级并像这样发送数据包:

send(PacketHeader(Sequencenum=257))
send(PacketHeader(Sequencenum=258))
send(PacketHeader(Sequencenum=259))

不幸的是,在电线上我有\x32\x35\x37(257 in hex)而不是这个:\x01\x01

我想做的是能够:

send(PacketHeader(Sequencenum=257+1)) 

并在电线上正确转换为 int

提前致谢 !

4

3 回答 3

3

如果您想将int任何其他原始数据类型转换为二进制,那么该struct模块可能会帮助您。

http://docs.python.org/library/struct

>>> import struct
>>> struct.pack('>i', 257)
'\x00\x00\x01\x01'
>>> struct.pack('<i', 257)
'\x01\x01\x00\x00'
>>> struct.unpack('<i', '\x01\x01\x00\x00')
(257,)
>>> struct.unpack('>i', '\x00\x00\x01\x01')
(257,)

ms4py提到你可能想要转换 2 字节整数,所以:

>>> struct.pack('>h', 257)
'\x01\x01'
>>> struct.unpack('>h', '\x01\x01')
(257,)
>>> 

哦,还有:

>>> struct.unpack('>h', '\x10\x00')
(4096,)
>>> 
于 2012-07-10T20:55:57.117 回答
0

如果你有一个整数并且想要十六进制:

hex(257)
'0x101'

其他方式

int('0x101', 16)
257
于 2012-07-10T20:57:31.983 回答
-1

在我看来,你想要一个整数到二进制转换器。

如果是这样的话,那么这应该工作:

def convert(N):
    if not N:
        return ''
    else:
        return "%s%s" %(convert(N/2), N%2)

希望这可以帮助

于 2012-07-10T21:03:00.877 回答