簡體   English   中英

將字符串放在 python 中的字節狀 object

[英]Put string on byte-like object in python

我在連接 python 中的兩個編碼字符串時遇到問題。 下面的字符串是我想要連接后的字符串:

a = b"\x50\x02\x00\x00\x00\x00\x97\x15\x0d\x00\x00\x00\x00\x00\x00\x8d\x0a"

但我想動態地將 append \x97\x15部分字符串傳遞給它,我的解決方案如下:

def convert(deviceId):
        return r"\x{}\x{}".format(str(hex(int(deviceId))).replace("0x", "")[2:].strip(), str(hex(int(deviceId))).replace("0x", "")[:2].strip())

b = "\x50\x02\x00\x00\x00\x00{}\x0d\x00\x00\x00\x00\x00\x00\x8d\x0a".format(convert(5527))

但是這個ab變量不一樣,我計算了ab的 hash 並且它們不一樣。 我怎樣才能解決這個問題? convert() function 用於將數字轉換為十六進制並將十六進制的每一部分反轉,例如5527的十六進制是0x1597我應該在這個 function 中收到\x97\x15並將其放在字符串的中間a 還有另一種方法可以將5527轉換為\x97\x15並將其放在字符串a的中間嗎?

您的轉換function 不正確,這是因為對\x97\x15的普遍混淆:

  1. 它實際上是什么: 5527 - 2 個字節的大端順序( 0x970x15 )的十六進制表示,或具有ASCII碼的字符:151、21
  2. 你認為它是什么:上面的“字符串化”形式( repr將返回) - 一個 8 字節字符串,帶有以下字符:' \ '、' x '、' 9 '、' 7 '、' \ ' , ' x ', ' 1 ', ' 5 '
 >>> def convert_orig(deviceId): ... return r"\x{}\x{}".format(str(hex(int(deviceId))).replace("0x", "")[2:].strip(), str(hex(int(deviceId))).replace("0x", "")[:2].strip())... >>> >>> co = convert_orig(5527) >>> co, len(co) ('\\x97\\x15', 8) >>> >>> def convert_new(device_id): # Does NOT work for numbers wider than 2 bytes (greater than 65536)... return "".join(chr(i) for i in reversed(divmod(device_id, 256)))... >>> cn = convert_new(5527) >>> cn, len(cn) ('\x97\x15', 2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM