Bitcoin-Core
這個 php 程式碼的 python 等價物是什麼values=unpack(‘C∗’,pack(‘H*”,v一個升你電子秒=你np一個Ck(“C*“,p一個Ck(“H*“,values = unpack(‘C*’, pack(‘H*’,腳…
我正在嘗試轉換此 php 程式碼:
$scriptpubkey = '4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac' $values = unpack("C*", pack("H*", $scriptpubkey));
到蟒蛇。到目前為止,我已經做了以下事情:
PHP: pack("H*", $scriptpubkey) -> Python: binascii.unhexlify(scriptpubkey)
我不確定它是否正確。如果有人能解釋打包、解包函式以及字元“C*”、“H*”的作用,將不勝感激。
如果有人可以解釋包裝,解包功能
根據格式將給定的參數打包成二進製字元串。
根據給定的格式將二進製字元串解壓縮到數組中。
所以我希望程式碼生成一個字元數組。這在 PHP 中可能有用,但在 Python 中沒有用。
格式字元在包下解釋
ETC
但是,我會避免逐個語句或逐個函式翻譯執行語句,並嘗試理解整個程式碼部分試圖實現的目標,然後找出如何使用 Python 中可用的標準庫最好地完成它。我發現圖書館和習語因語言而異,過度直譯可能最終變得脆弱、低效和難以理解。不過,您的體驗可能會有所不同。
請注意,您詢問的是 PHP 和 Python,而不是比特幣的細節。這個問題在 stackoverflow.com 上可能做得更好。
這些 pack/unpack php 函式似乎與同名的 perl 函式完全一樣。
所以
pack("H*", ...)
將 ascii 字元串轉換為字節字元串。並將
unpack("C*", ...)
字節字元串轉換為字節值數組。在 python 中,
pack("H*", $scriptpubkey)
將是:binascii.a2b_hex(scriptpubkey)
python 不需要第二步,因為字節數組在 python 中已經是字節值的列表。如果您訪問單個元素: 在這種情況下
a[0]
您將獲得整數值 。0x41
訪問子範圍時:a[1:]
會得到一個包含公鑰的字節數組。然後再說一句,如果您的變數包含腳本的十六進製表示形式,那麼在變數名中指明這一點可能會更清楚,例如將其命名為
hex_scriptpubkey
.