int到二进制python

时间:2012-07-10 20:51:47

标签: python networking binary int

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

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

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\x37hex中的257),而不是\x01\x01

我想做的是,能够:

send(PacketHeader(Sequencenum=257+1)) 

并在线上正确转换为int

提前致谢!

3 个答案:

答案 0 :(得分: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,)
>>> 

答案 1 :(得分:0)

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

hex(257)
'0x101'

其他方式

int('0x101', 16)
257

答案 2 :(得分:-1)

对我来说,你想要一个整数到二进制的转换器。

如果是这种情况,那么这应该有效:

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

希望这有帮助