我目前正在對python中的字符串進(jìn)行一些編碼和解碼。我應(yīng)該將一些代碼從 C# 轉(zhuǎn)換為 python,但是我遇到了一些問題,如下所示:所以現(xiàn)在我有一個看起來像這樣的字符串:21-20-89-00-67-00-45-78 代碼應(yīng)該消除-數(shù)字之間的中間值,并將 2 個整數(shù)打包成 1 個組,然后將它們轉(zhuǎn)換為字節(jié)。在 C# 中,它是這樣完成的:var value = "21-20-89-00-67-00-45-78";var valueNoDash = value.Replace("-", null);for (var i = 0; i < DataSizeInByte; i++){ //convert every 2 digits into 1 byte Data[i] = Convert.ToByte(valueNoDash.Substring(i * 2, 2), 16);}上面的代碼表示步驟 1:-從字符串中刪除,步驟 2:使用 Substring 方法將它們分成 1 組中的 2 位,步驟 3:使用以 16 為底的 Convert.ToByte 將它們轉(zhuǎn)換為 16 位無符號整數(shù)。結(jié)果Data是33321370103069120到目前為止,我對這個 C# 代碼沒有任何問題,但是當(dāng)我嘗試在 python 中做同樣的事情時,我無法得到與 C# 代碼相同的結(jié)果。我的python代碼如下:from textwrap import wrapimport structvalues = "21-20-89-00-67-00-45-78"values_no_dash = a.replace('-', '')values_grouped = wrap(b, 2)values_list = []for value in values_grouped: values_list.append(struct.pack('i', int(value)))在 python 中,它給了我十六進(jìn)制值的字節(jié)列表,如下所示:b'\x15\x00\x00\x00'b'\x14\x00\x00\x00'b'Y\x00\x00\x00'b'\x00\x00\x00\x00'b'C\x00\x00\x00'b'\x00\x00\x00\x00'b'-\x00\x00\x00'b'N\x00\x00\x00'這是字節(jié)對象,但是當(dāng)我將此對象轉(zhuǎn)換為十進(jìn)制時,它給了我與原始字符串完全相同的值:21, 20, 89, 0, 67, 0, 45, 78.這意味著我沒有成功轉(zhuǎn)換為 16 位無符號整數(shù),對嗎?我怎樣才能在python中做到這一點?我已經(jīng)嘗試使用str.encode()但結(jié)果仍然不同。我怎樣才能實現(xiàn) C# 在 python 中所做的事情?感謝并感謝任何人可以提供幫助!
1 回答

素胚勾勒不出你
TA貢獻(xiàn)1827條經(jīng)驗 獲得超9個贊
我認(rèn)為這是您正在尋找的解決方案:
values = "21-20-89-00-67-00-45-78"
values_no_dash_grouped = values.split('-') #deletes dashes and groups numbers simultaneously
for value in values_no_dash_grouped:
print(int(value, 16)) #converts number in base 16 to base 10 and prints it
希望能幫助到你!
添加回答
舉報
0/150
提交
取消