簡體   English   中英

將 python 列表轉換為字節數組並返回

[英]Convert python list to bytearray and back

我有一個列表:['qwe', 600, 0.1]。

目標是將整個列表轉換為字節數組。 我需要在解碼后將項目類型保存在列表中。

我試過這樣:

list = ['qwe', 600, 0.1]
new_list = []
for i in list:
   list_1 += [str(i)]
bytes = bytearray(','.join(new_list).encode('utf-8'))

#decoding is ugly:
item_list = [b.decode('utf-8') for b in bytes]
new_item_list = []
   for item in item_list:
      try:
         new_item_list += [int(item)]
      except ValueError:
         new_item_list += [item]
      final_list = []
      for item in new_item_list:
         if type(item) == int:
            final_list += [item]
         else:
            try:
               final_list += [float(item)]
            except ValueError:
               final_list += [item]

這種方法的缺點是

1)將數據轉換為 str 丟失原始類型的項目

2) 列表中的第一項可以是例如 '123' 或 'qwe,rty' - 這會在解碼時導致錯誤

我也想過這個邏輯:

list = ['qwe', 600, 0.1]    
list_bytes=[]
for i in list:
   if type(i) == str:
      list_bytes += [bytearray(i.encode('utf-8'))]
   if type(i) == int or float:
      list_bytes += [i.to_bytes(2,byteorder='big')]
bytes = ','.join(list_bytes)

但我一直在解碼,不知道如何測試 list_bytes 中的編碼項是 str、int 還是 float。

您可以使用泡菜

import pickle

data = ['qwe', 600, 0.1]

x = bytearray(pickle.dumps(data))
# x = bytearray(b'\x80\x04\x95\x17\x00\x00\x00\x00\x00\...')
y = pickle.loads(x)
# y = ['qwe', 600, 0.1]

暫無
暫無

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

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