对于大多数人来说,这个问题可能很容易,但到目前为止我找不到答案。
我正在构建一个类似这样的网络数据包生成器:
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
(hex
中的257),而不是\x01\x01
。
我想做的是,能够:
send(PacketHeader(Sequencenum=257+1))
并在线上正确转换为int
提前致谢!
答案 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)
希望这有帮助