あなたは私の他の答えを受け入れましたが、あなたが本当に望んでいたのは を使用してデータをバイナリに変換することであると説明したコメントに気づいた後struct.pack()
、私はあなたにもっと適した別の答えを書きました(長くて少し複雑ですが)。
import struct
class TypeConv(object):
BSA = '=' # native Byte order, standard Size, with no Alignment
def __init__(self, conv_func, fmt_chr):
self.__dict__.update(conv_func=conv_func, fmt_chr=fmt_chr)
def pack(self, data):
py_value = self.conv_func(data)
count = str(len(py_value)) if self.conv_func is str else ''
return struct.pack(self.BSA+count+self.fmt_chr, py_value)
type_conv = {'string': TypeConv(str, 's'),
'int32': TypeConv(int, 'i'),
'int64': TypeConv(long, 'q'),
'float32': TypeConv(float, 'f'),
}
array = [['string', 'int32', 'string', 'int64', 'float32', 'string', 'string'],
['any string', '19', 'any string', '198732132451654654',
'0.6', 'any string', 'any string']]
binary_values = [type_conv[type_id].pack(data)
for type_id, data in zip(array[0], array[1])
if type_id in type_conv] # to skip any unknown type_ids
print binary_values
出力:
['any string', '\x13\x00\x00\x00', 'any string', '\xfe\x9b<P\xd2\t\xc2\x02',
'\x9a\x99\x19?', 'any string', 'any string']
このTypeConv.pack()
メソッドは、最初に文字列値を同等の Python 値に変換しpy_value
、次にそれを使用struct.pack()
して C バイナリ値に変換します。これがあなたが求めているものだと思います。