【问题标题】:int to binary pythonint 到二进制 python
【发布时间】:2012-07-10 20:51:47
【问题描述】:

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

我正在构建一个网络数据包生成器,如下所示:

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

提前致谢!

【问题讨论】:

  • 我可能被太多的信息弄糊涂了 :-) 你想把整数转换成十六进制吗?你能给出一个简单的输入和期望输出的例子吗?
  • @martineau:我的错,你应该读到:“\x01\x01”。会修改我的帖子。

标签: python networking binary int


【解决方案1】:

如果您想将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,)
>>> 

【讨论】:

  • 可能他想要一个short(两个字节为一个int):&gt;&gt;&gt; struct.pack('!h', 258)'\x01\x02'
  • 也许你是对的,我不知道:( ...无论哪种方式,结构的链接都应该帮助他决定如何进行转换,无论如何我都会添加示例,谢谢.
  • 我应该想到这个!谢谢你的回答。
【解决方案2】:

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

hex(257)
'0x101'

其他方式

int('0x101', 16)
257

【讨论】:

  • 我也是这么想的 .. 但似乎太直接了:) 也许 OP 会澄清
  • @Levon 同意——但我想我会赌一把;)
  • 谁知道呢,这可能只是票……如果 OP 喜欢,你也会得到我的支持。
  • @Levon 我确实喜欢 struct 的答案——更便携
【解决方案3】:

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

如果是这样,那么这应该有效:

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

希望对你有帮助

【讨论】:

  • bin(N)[2:] 已经这样做了:) ..“包括电池”等等。 (没有投反对票!)
  • 不知道bin(n)。天啊!我这样做的次数!这些年来,我在这么多模块中浪费了这么多 LOC流下了无声的眼泪
  • @Levon 代码与 '{:b}'.format(257) 我认为(如果你不想要前导 0x 的东西......)
  • 投反对票的人:你愿意给我一个理由,以便我可以升级我的答案吗?
猜你喜欢
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2020-08-29
  • 2012-10-08
相关资源
最近更新 更多