我有一个数字列表,我想将其作为二进制数据发送到套接字连接上。例如,我从以下列表开始:data = [2,25,0,0,ALPHA,0,23,18,188]在上面的列表中, ALPHA 可以是 1 到 999 之间的任何值。最初,我使用 hexdata = ''.join([chr(item) for item in data])所以如果 ALPHA 是 101,这将返回以下字符串:>>> data = [2,25,0,0,101,0,23,18,188]>>> hexdata = ''.join([chr(item) for item in data])>>> hexdata'\x02\x19\x00\x00e\x00\x17\x12\xbc'这工作得很好,'\x02\x19\x00\x00e\x00\x17\x12\xbc' 是我需要发送的字符串。但是,这不适用于超过 255 的 ALPHA 值,因为它超出了 chr 语句的范围。例如,如果ALPHA是999,那么我想获得以下字符串:data = [2,25,0,0,999,0,23,18,188]hexdata = '\x02\x19\x00\x03\xed\x00\x17\x12\xbc'我一直在查看 struct.pack() 上的文档,但看不到如何使用它来实现上述字符串。 ALPHA 是列表中唯一的变量。任何帮助将不胜感激。 编辑 1 没错,因为 999 超过了 256 阈值,所以它由两个字节表示:data = [2,25,0,0,999,0,23,18,188]hexdata = '\x02\x19\x00**\x03\xed**\x00\x17\x12\xbc'这有意义吗?就解包而言,我只将这些数据发送到套接字上,我将接收数据,但这已经处理好了。 编辑 2 我发出的字符串总是固定长度的。为简单起见,我认为最好将列表表示如下:ALPHA = 101data = [25,alpha1,alpha2,1]hexdata = '\x19\x00e\x01'ALPHA = 301data = [25,alpha1,alpha2,1]hexdata = 'x19\x01\x2d\x01'正如你在 hexdata 字符串中看到的那样,它变成了:\x01\x2d\如果 ALPHA 最佳答案 如果要发送小于256的ALPHA单字节,如果大于等于256则要发送两个字节?这似乎很奇怪-接收者如何知道是哪种情况... ???但是,如果这就是您想要的,那么x = struct.pack(4*'B' + 'HB'[ALPHA<256] + 4*'B', *data)是实现这一目标的一种方法。关于python - 在python中将整数列表转换为二进制 "string",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1331187/