【问题标题】:transform hex to binary and vice versa, but keeping them as integers将十六进制转换为二进制,反之亦然,但将它们保持为整数
【发布时间】:2019-03-31 21:35:52
【问题描述】:

我知道如何使用 bin 函数将十六进制整数转换为二进制字符串,但是有没有简单的方法可以将十六进制整数转换为二进制整数

换个说法,有没有一种简单的方法可以将二进制整数 ("0b111") 的字符串表示形式转换为表示二进制整数 (0b111) 的整数

使用 bin() 生成一个十六进制字符串

>>> bin(0x7)
'0b111'
>>> type(bin(0x7))
<class 'str'>

但我想要实现的是:

>>> magic(0x7)
0b111
>>> type(magic(0x7))
<class 'int'>

(魔术函数只是一个占位符,本质上我想要一种将二进制整数的字符串表示形式转换为二进制整数的方法)

  • 问题 1: 这是否可能,如果可以,如何?
  • 问题 2: 这样做有意义吗?使用十六进制和二进制数的字符串表示或整数表示是否更好?

【问题讨论】:

    标签: python string binary integer hex


    【解决方案1】:

    所谓的“十六进制整数”和“二进制整数”之间没有区别——它们都是整数:

    >>> 0x07
    7
    >>> 0b111
    7
    >>> type(0x07)
    <type 'int'>
    >>> type(0b111)
    <type 'int'>
    >>> 0x07 == 0b111
    True
    >>> 0x07 is 0b111  # This is true in the special case of small integers
    True
    

    0x0b 前缀只是您告诉解释器如何读取您提供的输入的一种方式。

    至于将整数的二进制字符串表示形式转换为实际整数,您可以使用int(string, base)

    >>> int('0b111', 2)
    7
    

    【讨论】:

    • 所以如果我理解正确,就没有必要区分0x1117,因为编译器将两者视为同一事物?
    • 为了更清楚,&gt;&gt;&gt; int('0b111', 2) 的输出与7 对于编译器的输出与&gt;&gt;&gt; magic('0b111', 2) 与输出0b111 的输出完全相同
    • (我最后的评论被表述为一个问题,但我忘记了问号)
    • 是的。 0x070b1117在解释器眼里都是一模一样的。
    猜你喜欢
    • 2012-09-18
    • 2021-07-17
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2011-03-23
    • 2021-08-15
    相关资源
    最近更新 更多