import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
file_object =open('thefile.txt')try:
file_context = file_object.read()finally:
file_object.close()
d =file_context.split(' ')print(d)
data =list()for c in d:if(c !='\n')&(c !=''):
data.append(int(c,16))print(data)
x =range(0,len(data))#传入两个参数时,第一个参数作为起始位,第二个参数为结束位,第三个参数是步进值(默认为1)
y = data
plt.xlabel('时间')
plt.ylabel('deal_car')
plt.plot(x,y,'bo')#添加'o'则变为散点图,否则各点自动连线
plt.show()
从文本数据中依据数据帧头提取转换四字节16进制数据,转换为十进制进行绘制表。
import ctypes
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False#用来正常显示负号
fp =open('test.txt')
content = fp.read()
frame_state =0
d = content.split(' ')
data =list()whilelen(d):#必须保证文本内最后的光标紧跟着数据,不能有空格,否者此代码会卡死if(frame_state ==0):if(len(d)>=3):if(d[0]=='FF')and(d[1]=='A5')and(d[2]=='5A'):
frame_state =1del d[0:3]else:del d[0]
frame_state =0elif(len(d)>=4):
dd = d[0]+d[1]+d[2]+d[3]print(dd)
data.append(int(dd,16)-4294967296)#若是负数则需要减去2的32次方,正数则不需要
frame_state +=1if(frame_state ==11):
frame_state =0del d[0:4]else:breakprint(data)
x =range(0,len(data))#传入两个参数时,第一个参数作为起始位,第二个参数为结束位,第三个参数是步进值(默认为1)
y = data
plt.xlabel('时间')
plt.ylabel('deal_car')
plt.plot(x,y,'b*')#添加'o'则变为散点图,否则各点自动连线
plt.show()
import struct
x =[67,20,121,71]
a =struct.unpack('<f', struct.pack('4b',*x))[0]
(2)将4个字节的十六进制转换成一个float数值[负数也适用]
from ctypes import*defconvert(s):#将十六进制转换为浮点数
i =int(s,16)
cp = pointer(c_int(i))
fp = cast(cp, POINTER(c_float))return fp.contents.value
print(convert("41499499"))#或者import ctypes
defconvert(s):#将十六进制转换为浮点数
i =int(s,16)# convert from hex to a Python int
cp = ctypes.pointer(ctypes.c_int(i))# make this into a c integer
fp = ctypes.cast(cp, ctypes.POINTER(ctypes.c_float))# cast the int pointer to a float pointerreturn fp.contents.value # dereference the pointer, get the floatprint(convert("41499499"))# returns 1.88999996185302734375E1
(3)一个float变量转成内存的4个字节十进制
import struct
byte = struct.pack('f',523432.523424)
ls =[i for i in byte]print(ls)
(4)将float变量转换为十六进制
import struct
byte = struct.pack('f',13.4)
byte = byte[::-1]#反序
data =list()for i in byte:
data.append(hex(i))print(data)
pw =input(':')#输入需转换为ascii码的字符串
temp =[]#创建加密字符空列表for i in pw:#字符转ascii码(因为不能直接将字符串直接转换为ascii码,所以只能一个一个转换)
x =hex(ord(i))#将pw中的每一个字符转换为ascii码[转换为8进制改为oct,16进制hex]
temp.append(x)#将每一个字符添加到列表中print(temp)#ASCII输出print('%s '*len(temp)%tuple(temp))#字符串输出
将一个字符串转换为相应的_进制串
defstr_to_hex(s):return' '.join([hex(ord(c)).replace('0x','')for c in s])
str_to_hex("hello")defhex_to_str(s):return''.join([chr(i)for i in[int(b,16)for b in s.split(' ')]])defstr_to_bin(s):return' '.join([bin(ord(c)).replace('0b','')for c in s])defbin_to_str(s):return''.join([chr(i)for i in[int(b,2)for b in s.split(' ')]])
将一个字符串转换为相应的_进制串
#从界面输入框中获取字符
data =input.get()#删除所有空格会转换为list模式
data1 = data.split()#从list模式—>str模式
data2 =''.join(data1)#若想str模式——>list模式 list=list(str名)#在str模式下可以将字符按照十六进制格式发送:cd -----> 0xcd
binascii.a2b_hex(senddata2)#串口将十六进制格式的字符发送出
N = self.ser.write(binascii.a2b_hex(senddata2)) N为发送字符数目