在Python中,我想將整數3892
轉換爲具有給定格式和結果\x00\x00\x0F\x34
的十六進制代碼。這怎麼能實現?在Python中將整數轉換爲十六進制
回答
您正在轉換爲數字的二進制表示,而不是十六進制表示(儘管Python將以十六進制顯示字節)。使用struct
module進行此類轉換。
演示:
>>> struct.pack('>I', 3892)
'\x00\x00\x0f4'
>>> struct.pack('>I', 4314)
'\x00\x00\x10\xda'
注意,對於「4」的ASCII碼是0x34,蟒僅顯示與\x
逃逸字節,如果它是一個非打印字符。因爲0x34是可打印的,Python代替4
輸出。在上面的格式化代碼中,''表示'big endian',而'I'表示無符號的int轉換(4字節)。
是不是3892十進制0xf34十六進制? – martineau 2012-07-27 11:11:57
@martineau:我在我的回答中解決了這個問題。 python顯示'4',因爲這是代碼位置0x34處的ASCII字符。因此,字節序列中的最後一個字符是'\ x34',但因爲它是可打印的,所以它不會顯示爲十六進制轉義。 – 2012-07-27 11:44:27
嗯,我現在在你的回答中明白你的意思,謝謝。目前還不清楚OP是否需要這個或者@ cdarke的答案產生的結果,但是懷疑它可能是前者,所以必須添加我自己的+1。 – martineau 2012-07-27 18:17:00
如果你已經安裝numpy的:
>>> import numpy as np
>>> np.int32(3892).tostring()
'4\x0f\x00\x00'
感謝您的快速解答!但是我需要將\ x00 \ x00 \ x0F \ x34作爲實際結果,因爲我必須將其導回到文件中。是否有可能做到這一點? – fernandes 2012-07-27 08:05:10
import re
print re.sub(r'([0-9A-F]{2})',r'\\x\1','%08X' % 3892)
給出:
\x00\x00\x0F\x34
哇!多數民衆贊成它 - 真的很酷。非常感謝。 @cdarke爲了我平庸的正則表達式技巧:你能給我一個短暫的正則表達式嗎? – fernandes 2012-07-27 09:59:13
這會生成一個16字符的字符串,其中包含文字反斜槓,文字「x」和文字數字。 ''%08X'產生十六進制數字,正則表達式每兩位數字插入一個文字'\ x'。我的解決方案生成* 4 *字節,其中包含您的數字作爲無符號[C長整型值](https://en.wikipedia.org/wiki/Integer_%28computer_science%29#Common_long_integer_sizes)。你需要弄清楚你需要寫入你的文件的格式;如果它是一種二進制格式,我的答案就是我的答案。 :-) – 2012-07-27 18:40:00
對不起,我一直在旅行。 RE如下(除了@Martijn Pieters的正確解釋):'([0-9A-F] {2})'只查找2個十六進制數字。括號()捕獲我們匹配的內容,並在替換字符串中表示爲'\ 1'(稱爲後向引用)。 '\\ x'用'\ x'前綴捕獲的兩個字符。如果你對此感到滿意,如果你接受了我的解決方案,那將會很好,但我同意其他人的觀點,即你的問題有點含糊。 – cdarke 2012-07-27 19:33:45
- 1. 在Arduino上將整數/十進制轉換爲十六進制?
- 2. 在Python中將十六進制值轉換爲十進制
- 3. 如何在Python中將十六進制轉換爲十進制?
- 4. 將十進制轉換爲十六進制和十六進制
- 5. 整數轉換爲十六進制Java
- 6. php,轉換爲十六進制整數
- 7. Python - 從十六進制整數轉換爲十六進制字符串
- 8. 將十六進制轉換爲python中的十進制
- 9. 使用Python將十六進制字符串轉換爲十進制整數
- 10. 使用Python將整數轉換爲雙字節十六進制
- 11. 在delphi 7中將整數轉換爲十六進制數
- 12. 將十六進制轉換爲二進制到十六進制?
- 13. Python將十進制轉換爲十六進制
- 14. 要在perl中將整數轉換爲十六進制
- 15. 在JavaScript中將整數轉換爲十六進制字符串
- 16. 在Groovy中將整數轉換爲十六進制字符串
- 17. 在Ruby中將整數轉換爲十六進制字符串
- 18. 將八進制數轉換爲十進制和十六進制
- 19. 將excel中的Unicode十六進制數轉換爲十進制
- 20. 將數字轉換爲十六進制
- 21. 在python熊貓數據框中將十六進制轉換爲十進制
- 22. 將字符串轉換爲十六進制到十六進制
- 23. 在Visual C++中將十進制值轉換爲十六進制
- 24. 在程序集中將十進制轉換爲十六進制
- 25. 在VB6中將十六進制值轉換爲十進制值
- 26. 在Lua 4中將十進制轉換爲十六進制?
- 27. 在Swift中將十六進制轉換爲十進制
- 28. 如何在bash中將十進制轉換爲十六進制?
- 29. 在R中將十六進制轉換爲十進制
- 30. 將十六進制轉換爲十進制在swift中
如果整數超過32位? – martineau 2012-07-27 11:06:45
希望它不會是 – fernandes 2012-07-27 11:54:13
嗯,所以你希望基於希望和祈禱的代碼,沒問題。當你說「具有給定格式的十六進制代碼」時,你的意思是字面上的一串字節,代表大字節機器上的32位值「0x0f34」,還是字面意義上的字符串「」\\ x00 \\ x00 \\ \\ X0F X34" '? – martineau 2012-07-27 18:33:19