2013-03-26 18 views
2

我想在python中追加一些十六進制值,而且我總是在數字之間得到0x。從我搜索的內容來看,要麼沒有將它轉化爲一個值的亮度是不可能的我不確定。在python中追加2個十六進制值

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

我不想在中間的0X - 我需要,0x7b80000。有沒有其他方法可以做到這一點?如果我轉換爲整數,我得到的兩個總和,並將其轉換爲十六進制是一個不同的值比0x7b80000

回答

1

這是更通用的方式來追加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的最高倍數的前面。

+0

感謝這也工作! – Ram 2013-03-26 05:26:24

+0

'append_hex'對於與十六進制無關的東西來說名字很差。 – 2016-03-05 00:14:00

+1

@JonathonReinhart我不明白你的意見。它遲了3年,沒有建設性。 – Serdalis 2016-03-05 11:42:05

2

我不認爲你想「追加」他們。使用字符串進行整數運算是一個壞主意。我想你想位移位a到正確的地方,或者將它們一起:

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

或許,如果你是更具體的瞭解,你要完成,我可以提供一個更加這些數字是什麼,究竟是什麼一般答案。

+0

儘管此方法適用於他提供的數字,但請在「a = 0x32」,「b = 0x32」處嘗試。假設20 ==比特大小b – Serdalis 2013-03-26 04:54:49

+0

謝謝!!!那工作。所以,我有兩個十六進制值,我需要在正確的位位置創建一個包含這些值的字符串。對於誤導性問題抱歉。我可以給一個概述 - 我有一個文件,其中每行有兩個十六進制值,並且看到這些值,腳本應該通過將這些值放在正確的位置來創建一個字符串。例如:32位字符串,其中0-8位將讀取0x7b,而10- 30位將讀取0x80000。 ' – Ram 2013-03-26 05:25:28

+0

@ Serdalis - 我明白了,所以當我按照你說的去做時,它會在前面追加零。 – Ram 2013-03-26 05:28:59