【问题标题】:append 2 hex values in python在python中附加2个十六进制值
【发布时间】:2013-03-26 04:26:52
【问题描述】:

我试图在 python 中附加一些十六进制值,我似乎总是在数字之间得到 0x。根据我的搜索,如果不将其转换为一系列值,这是不可能的?我不知道。

a = 0x7b
b = 0x80000
hex(a) + hex(b) = 0x7b0x80000

我不想要中间的 0x - 我需要 0x7b80000。有没有其他方法可以做到这一点?如果我转换为整数,我会得到两者的总和,并将其转换为十六进制的值与 0x7b80000

不同

【问题讨论】:

    标签: python string hex


    【解决方案1】:

    您可以在 Python 3 中使用 f 字符串格式:

    >>> a = 0x7b
    >>> b = 0x80000
    >>> f'0x{a:x}{b:x}'
    '0x7b80000'
    

    【讨论】:

      【解决方案2】:

      我认为您不想“附加”它们。使用字符串进行整数运算是个坏主意。我认为您想将a 移位到正确的位置并将它们组合在一起:

      >>> a = 0x7B
      >>> b = 0x80000
      >>>
      >>> hex( (a<<20) | b )
      '0x7b80000'
      

      也许如果您更具体地了解这些数字是什么以及您究竟想要完成什么,我可以提供一个更笼统的答案。

      【讨论】:

      • 虽然这种方法适用于他提供的号码,但请在a=0x32b=0x32 上尝试一下。假设 20 == b 的位大小
      • 谢谢!!!那行得通。所以,我有两个十六进制值,我需要在正确的位位置创建一个包含这些值的字符串。对不起,误导性的问题。我可以给出一个概述 - 我有一个文件,其中每一行都有两个十六进制值,看到这些值,脚本应该通过将这些值放在正确的位置来创建一个字符串。例如:` 32 位字符串,其中 0-8 位将读取 0x7b,而 10-30 位将读取 0x80000。 `
      • @Serdalis - 我明白了,所以当我按照你说的做时,它会在前面附加零。
      • @Serdalis 对,它只适用于给定的值。但是,我想不出一个原因,您需要这样的通用解决方案。在不知道位位置的情况下组合数字?废话。
      • @Ram 你的位数没有任何意义。位 0 是最低有效位(最右边)。
      【解决方案3】:

      已经 7 年了,但接受的答案是错误的,这篇文章仍然出现在谷歌搜索的首位;所以这是一个正确的答案:

      import math
      
      def append_hex(a, b):
       sizeof_b = 0
      
       # get size of b in bits
       while((b >> sizeof_b) > 0):
           sizeof_b += 1
      
       # every position in hex in represented by 4 bits
       sizeof_b_hex = math.ceil(sizeof_b/4) * 4
      
      
       return (a << sizeof_b_hex) | b
      

      接受的答案没有意义(您可以使用值 a=10,b=1a 来检查它)。在这个解决方案中,我们搜索最接近的 4 分频器 - 因为每个十六进制值都由 4 位表示 - 然后在这次的位中移动第一个值。

      【讨论】:

      • 感谢您提供正确答案!但是,如何在附加 0x00 时使其工作?
      • @BrockenDuck 你不能。这就是为什么“附加”未知大小的值的整个问题没有意义。 “附加”0x00(或0x0,或0x0000000000000)对您意味着什么?
      • @JonathonReinhart 我想在这种情况下这意味着:0x2F || 0x00 = 0x2F00 ?我正在尝试获得更大的值,有点像乘法
      • 0x0000x000000000000000 完全相同。它们是未指定大小的整数。从算法的角度来看,您用两个零显示它的事实没有任何意义。这就是为什么在没有明确说明所涉及整数的大小的情况下,整个问题都是任意的!
      【解决方案4】:

      这是一种更通用的附加 hex / int / bin 值的方法。
      仅适用于 b 的正值。

      a = 0x7b
      b = 0x80000
      
      def append_hex(a, b):
          sizeof_b = 0
      
          # get size of b in bits
          while((b >> sizeof_b) > 0):
              sizeof_b += 1
      
          # align answer to nearest 4 bits (hex digit)
          sizeof_b += sizeof_b % 4
      
          return (a << sizeof_b) | b
      
      print(hex(append_hex(a, b)))
      

      基本上,您必须找到b 具有的最高设置位。
      将该数字与4 的最高倍数对齐,因为这就是hex 字符的含义。
      a 附加到之前找到的 4 的最大倍数的前面。

      【讨论】:

        猜你喜欢
        • 2016-07-25
        • 2011-09-12
        • 2012-05-22
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 2018-07-16
        • 2010-10-05
        • 2022-12-22
        相关资源
        最近更新 更多