Bitcoin-Core

這個 php 程式碼的 python 等價物是什麼values=unpack(‘C∗’,pack(‘H*”,v一個升你電子秒=你np一個Ck(“C*“,p一個Ck(“H*“,values = unpack(‘C*’, pack(‘H*’,腳…

  • November 18, 2022

我正在嘗試轉換此 php 程式碼:

$scriptpubkey = '4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac'
$values = unpack("C*", pack("H*", $scriptpubkey));

到蟒蛇。到目前為止,我已經做了以下事情:

PHP: pack("H*", $scriptpubkey) -> Python: binascii.unhexlify(scriptpubkey)

我不確定它是否正確。如果有人能解釋打包、解包函式以及字元“C*”、“H*”的作用,將不勝感激。

如果有人可以解釋包裝,解包功能

PHP 手冊涵蓋了packunpack

根據格式將給定的參數打包成二進製字元串。

根據給定的格式將二進製字元串解壓縮到數組中。

所以我希望程式碼生成一個字元數組。這在 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.

引用自:https://bitcoin.stackexchange.com/questions/116023