我想从文件中读取字节并通过UDP发送。 下面是代码。在此代码中,blk_cntr设置为1。
msg_temp='\x00'+'\x03'+'\x00'+blk_cntr+str(filedata[0:(blocksize*i)])
它给我错误“ TypeError:必须为str,而不是int”
当我将其更改为
str(blk_cntr)
然后没有错误,但是UDP压缩速率由ascii值1组成,我希望它是纯1而不是其ASCII值。
我也不确定
str(filedata.....)
我希望msg_temp为00 03 00 01等 是正确的方法。
答案 0 :(得分:0)
我建议您查看struct
库。手动组装二进制有效载荷不是很有趣。
假设您的数据包格式为big endian,并具有以下字段:
您将执行以下操作:
>>> import struct
>>> data = struct.pack('>hh', 3, 1) + 'some_test_data'.encode('ascii')
>>> data
b'\x00\x03\x00\x01some_test_data'
如果要从文件读取此有效载荷数据,则需要对字符串进行编码,或打开文件进行二进制I / O。
为“ 文本模式”打开文件,I / O将在string
上产生一个read()
-如果t
或{{调用b
时,mode
字符串中没有给出1}}。
要将返回的字符串与二进制数据(open()
)一起使用,必须对其进行编码。
常见的编码为bytes
或ascii
。
utf-8
或者,打开文件以进行二进制I / O-在调用$ echo -n "some_test_data" > data_file
$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import struct
>>> data = struct.pack('>hh', 3, 1)
>>> payload = open('data_file', 'r').read()
>>> data += payload.encode('ascii')
>>> data
b'\x00\x03\x00\x01some_test_data'
时在b
字符串中输入mode
。
如果文件中包含任何二进制数据,这将是必需的。
open()