背景
我正在将数据转换为二进制,因为服务器端需要二进制类型。
问题:
如何将数字列表转换为字符串,然后重新构造该列表?
文件内容:
1 1 1
1 2 1
1 3 1
1 4 1
1 5 1
1 6 1
1 7 1
1 8 1
1 9 1
1 10 1
1 11 1
1 12 1
1 13 1
1 14 1
1 15 1
在客户端:我正在读取整个文件,并将每个值附加到列表中。然后列表被转换成数组,数组在数据发送到服务器之前被转换成字符串。
在服务器:我正在将字符串映射回值列表。然后使用grouper
将该列表转换为元组(x, y, w)
的列表。然后(x, y, z)
被送入Point
,新构造的对象被追加到一个列表中。
注意我不能使用bytearray
,因为这是一个人工数据样本,我的数字将比byte
所能代表的大得多。
代码:
数据发送到服务器
接收的数据
myList = list(map(ord, list(L)))
myList = list(grouper(myList, 3))
s = len(myList)
for i in range (0, s):
x, y, w = myList[i]
obj = Point(x, y, w)
listOfObjects.append(obj)
预期输出:
1 <---- first line in file
1
1
--------
1 <--- sixth line in file
7
1
实际输出:
1
0
1
1
0
4
我不知道我做错了什么。。我4天前问过this问题。"How to convert .txt file to a binary object"
。在
服务器指定应该发送的数据是:binary: A byte array
。这里我不能有一个简单的bytearray
,因为python bytearray被限制为容纳数字0-256
,而且我的文件中表示的数字要大得多。在
我应该用什么代替呢?至于上面的部分,它的清晰数据是混合的,我没有在服务器端正确地解析,或者我在代码中做了一些错误的事情,我看不到它。。。在
编辑!
我尝试发送列表而不是字符串,但服务器不接受。在
TypeError: write() argument 1 must be string or buffer, not list.
提前谢谢!在
在您的代码中:
您正在创建一个压缩为两字节整数的bytestring。在服务器端,然后使用
^{pr2}$list(L)
来生成一个列表,它使用L
的每个元素来生成一个列表,但是在这种情况下,它没有保留2字节的打包,因为它将bytestring中的每个元素看作一个字节,例如:因此,从源数据重建数组以获取所发送的内容。在
还请注意,在您的注释中,您说范围最多为1000000“-h”格式是一个2字节的有符号整数,因此您需要使用“l”来表示有符号的long,而不是充分地表示值。。。(有关可用选项,请参阅array documentation中的类型代码)
相关问题 更多 >
编程相关推荐