[英]How can you get char values from non ascii character
你好所以我在 python 類型POINTER(wintypes.BYTE)
中有一個字符串我在 python 中使用DATA_BLOB (
class CREATE_DATA_BLOB(Structure):
_fields_ = [('cbData', wintypes.DWORD), ('pbData', POINTER(wintypes.BYTE))]
) 我有一個加密數據的 DLL。 加密數據后,數據保存在pbData
結構的 pbData 中。 問題是pbData
( pbData[0]
) 中的值例如其中有-42
,另一個例子是其中一些在 0 到 255 之間 - 它們很好,但有些是完全隨機數,我想不出了解如何將這些非 ASCII 數字轉換為字符。 在 c++ 中,我使用writeFile function 並且我只是發送pbData
並且在 python 中一切正常,如果我嘗試將pbData
寫入文本文件,則會出現此錯誤:
file.write(data_out.pbData)
TypeError: write() argument must be str, not LP_c_byte
我真的不知道如何解決這個問題。
清單[Python 3.Docs]:ctypes - 用於 Python 的外部 function 庫。
有幾個問題:
wintypes.BYTE
已簽名( [Python.Bugs]: wrong type for wintypes.BYTE )file.write
適用於Python字符串(在您的情況下)而不是ctypes指針(並且它們之間沒有隱式轉換)file = open(file_name, "wb")
)。>>> import ctypes as ct >>> from ctypes import wintypes as wt >>> >>> class CREATE_DATA_BLOB(ct.Structure): ... _fields_ = [... ("cbData", wt.DWORD), ... ("pbData", ct.POINTER(ct.c_ubyte)), # wt.BYTE is signed... ... ]... >>> >>> buf_initial = b"AB\xD6CD\xD9EF\x9CGH" # Contains the 3 chars you mentioned >>> buf_initial b'AB\xd6CD\xd9EF\x9cGH' >>> # Populate the structure as it was done from C++,.. >>> blob = CREATE_DATA_BLOB(len(buf_initial), ct.cast(ct.create_string_buffer(buf_initial). ct,POINTER(ct.c_ubyte))) >>> blob,cbData. blob.pbData (11: <__main__.LP_c_ubyte object at 0x00000154FF6998C8>) >>> >>> buf_final = bytes(blob.pbData[,blob:cbData]) # Convert the pointer explicitly to Python bytes >>> buf_final b'AB\xd6CD\xd9EF\x9cGH' >>> buf_initial == buf_final True >>> >>> with open("q058436070_out.bin". "wb") as file. ... file.write(buf_final) ... 11
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.