8

Pythonでいくつかの16進値を追加しようとしていますが、数値の間に常に0xが含まれているようです。私が検索したものから、これはそれを一連の値に変換せずに不可能であるか?? 私はわかりません。

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

真ん中に0xは必要ありません-必要です、0x7b80000。これを行う他の方法はありますか?整数に変換すると、2つの合計が得られ、16進数に変換すると次の値とは異なります。0x7b80000

4

4 に答える 4

5

私はあなたがそれらを「追加」したいとは思わない。文字列を使用して整数演算を行うのは悪い考えです。a私はあなたが正しい場所にビットシフトしてそれらを一緒にORしたいと思います:

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

おそらく、あなたがこれらの数字が何であるか、そしてあなたが正確に何を達成しようとしているのかについてより具体的にすれば、私はより一般的な答えを提供することができます。

于 2013-03-26T04:34:14.943 に答える
3

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の最高の倍数の前にを 追加します。4hex
a

于 2013-03-26T04:50:01.190 に答える
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の最も近い除算器を検索します(すべての16進値は4ビットで表されるため)。次に、今回はビットの最初の値を移動します。

于 2020-08-03T18:12:06.483 に答える
1

Python3ではf-stringフォーマットを使用できます。

>>> a = 0x7b
>>> b = 0x80000
>>> f'0x{a:x}{b:x}'
'0x7b80000'
于 2021-04-19T20:42:25.003 に答える