假设我有tuple
或long long
个包含x = [12974658, 638364, 53637, 63738363]
类型的数字,
struct.pack
如果想单独struct.pack('<Q', 12974658)
,我必须使用
struct.pack('<4Q', 12974658, 638364, 53637, 63738363)
或者如果我想将其作为多个,那么我必须像这样明确地提到它
list
但是,如何在tuple
语句中的struct.pack
或for
中插入项目。我尝试使用这样的struct.pack('<4Q', ','.join(i for i in x))
循环。
expected string, int found
收到错误int
,因此我将包含str
类型的列表转换为binary_data = ''
x = [12974658, 638364, 53637, 63738363]
for i in x:
binary_data += struct.pack('<Q', i)
,现在打包它们要复杂得多。因为整个列表被转换为字符串(就像一个句子)。
截至目前我正在做一些像
这样的事情struct.unpack('<4Q', binary_data)
我打开它们就像
一样list
我的问题:有更好的方法,我可以直接在tuple
语句中指向struct.pack
或Gson gson = new GsonBuilder().create();
Type type = new TypeToken<Map<String, String>>(){}.getType(); //or use type of object of your JSON
Map<String, String> map = gson.fromJson(yourString, type);
String accessToken = map.get("access_token");
,或者可能是一个班轮?
答案 0 :(得分:9)
你可以splat,对不起“解压参数列表”:
>>> struct.pack("<4Q", *[1,2,3,4])
'\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00'
如果列表的长度是动态的,您当然也可以在运行时构建格式字符串:
>>> x = [1, 2] # This could be any list of integers, of course.
>>> struct.pack("<%uQ" % len(x), *x)
'\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00'