Block
如何解析塊索引 leveldb 中的值?
所以我正在嘗試用 Python 讀取塊文件。
從這個連結, 區塊鏈 levelDB 中使用的鍵是什麼(即鍵:值對是什麼)?,它告訴您如何使用 leveldb 訪問文件。所以我寫了一個類來讀取元數據。
class ReadBytes: def __init__(self, bytes): self.posistion = 0 self.bytes = bytes def get_int(self, byte_count): self.posistion += byte_count return decode(self.bytes[self.posistion - byte_count:self.posistion][::-1], 256) def get_var_int(self): self.posistion += 1 value = byte_to_int(self.bytes[self.posistion - 1]) if value < 253: return value return self.get_int(pow(2, value - 252))
但是從這個連結,<https://github.com/bitcoin/bitcoin/blob/master/src/chain.h#L364>,原來有這個東西叫
VarIntMode::NONNEGATIVE_SIGNED
我絆倒了。我可以用我的 Python 類讀取正常的 var int,但是如何在 Python 中讀取非負符號的?
非負有符號 varint 只是普通 varint,但應放入有符號整數,而不是像普通 varint 那樣放入無符號整數。你只需要檢查它是否是一個非負整數。
例如,不是將 32 位 varint 解碼為 ,而是將
uint32_t
其解碼為int32_t
並檢查它的值是否為>= 0
。您的程式碼看起來已經將事物解碼為有符號整數。我建議您不要使用內置於各種類中的 Python 轉換,而是使用該
struct
模組,以便您可以指定要解碼的字節的字節序和符號。