【问题标题】:Converting an ip address to binary representation将 IP 地址转换为二进制表示
【发布时间】:2018-01-12 23:18:22
【问题描述】:

我想获取 IP 地址的字节表示(大端,4 个字节)。

我正在使用 Python 2,我正在使用这个模块:https://github.com/phihag/ipaddress

如果我想得到127.0.0.1 的字节表示,我得到了预期的结果。

>>> ip_address(u'127.0.0.1').packed
'\x7f\x00\x00\x01'

但是对于52.4.20.183,我得到了这个结果:

>>> ip_address(u'52.4.20.183').packed
'4\x04\x14\xb7'

我觉得这种格式很奇怪,尤其是前面的4。我期待它是\x34\x04\x14\xB7。但显然,两者是相同的:

>>> ipaddress.IPv4Address(b'4\x04\x14\xb7')
IPv4Address(u'52.4.20.183')
>>> ipaddress.IPv4Address(b'\x34\x04\x14\xB7')
IPv4Address(u'52.4.20.183')

52.4.20.1834\x04\x14\xb7 的格式为什么是这样?在哪里可以找到更多信息?

【问题讨论】:

  • 原来'4'是字节值52的ASCII表示,见asciitable.com。换句话说:b'4' == b'\x34' == bytes([52]).
  • 根据其描述,packed 返回一个bytes 对象,该对象或多或少源自常规string。有关详细说明,请参阅bytes。您也可以在该官方文档中找到更多信息。

标签: python ip-address


【解决方案1】:

字符'4''\x34' 是等价的。两者都代表值 52。

【讨论】:

  • 谢谢!你也能解释一下,为什么 4 和 \x34 是一样的吗?
  • @mitchkman 每个字符都有一个值。在几乎所有现代编码(ASCII / ANSI / UTF-8 / ISO-8859-* / etc...)中,字符 4 的值都是 52。
  • 谢谢,查看 ASCII 表解开了谜团
  • 前导 \x 转义序列意味着该字符被解释为十六进制数字,并且在十六进制表示中,34 转换为 52(十进制)。
猜你喜欢
  • 2012-04-11
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2019-05-07
  • 2014-11-07
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
相关资源
最近更新 更多