2017-10-14 18 views
-1

我不能想出一種增加十六進制值的方法。假設我有一個變量 x = b'\ x00',我只是想繼續以這種格式遞增它,我該怎麼做呢? x = b'\ x00'... x ='\ xff'... x ='\ xff \ xff'。再次我想保留它作爲一個字符串變量,不一定是十六進制格式,但我只想從0位開始,並增加任何位。在Python中增加十六進制的方法?

+4

爲什麼你不是以一個數字開頭呢? –

+0

「將其保留爲字符串」*爲什麼*?是否有**任何**強制性理由不轉換爲數字,然後返回輸出字符串? –

+0

歡迎來到SO。請花時間閱讀[問]及其中包含的鏈接。 – wwii

回答

0

在Python 3中,最簡單的方法是使用數字您與轉換爲bytesto_bytes方法的int

for i in range(0xffff + 1): 
    # The "or 1" ensures 0 produces b'\x00' as output, not b'' 
    x = i.to_bytes((i.bit_length() + 7) // 8 or 1, 'big') 

即環路產生所有指定(從b'\x00'b'\xff\xff')的值,並且可以對你關心的任意範圍進行微調。

還有其他的方法來直接產生新的bytes對象(更容易bytearray,但bytes可以做到的),但他們不必要的複雜性,並可能慢啓動,例如增加一個bytearray,但我會避免一般。

+0

謝謝你的回答! I.bit_length部分究竟發生了什麼? – bbymintdrop

+0

@bbymintdrop:您需要將位長轉換爲字節長度,四捨五入(因爲1-8位需要1個字節,9-16需要2個等)。 '//'是分區劃分,但是可以將小區劃分定義爲'(num +(den-1))// den';因爲它是純粹的整數數學,它的速度更快,並且保證了'math.ceil(num/den)'不會的準確性。 – ShadowRanger