32位定点数和浮点数转换
def float2bin(file, pointLocation):
rawnums = []
with open (file,'r') as f:
line = f.read().strip()
rawnums = line.split('\n')
filel = list(file)
filel.insert(-4, '_bin')
fileout = ''.join(filel)
with open (fileout, 'w') as f:
for items in rawnums:
temp = float(items) * (2 ** pointLocation)
num_str = list("{:032b}".format(int(temp) & 0b11111111_11111111_11111111_11111111))
f.write(''.join(num_str)+"\n")
def bin2float(file, pointLocation):
rawnums = []
with open (file,'r') as f:
line = f.read().strip()
rawnums = line.split('\n')
filel = list(file)
filel.insert(-4, '_dec')
fileout = ''.join(filel)
with open (fileout, 'w') as f:
for items in rawnums:
if items[0] == '0':
temp = int(items[1:],2)
print(temp)
else:
itemsl = list(items)
itemsout = itemsl
for epoch,i in enumerate(itemsl):
if i == '0':
itemsout[epoch] = '1'
else:
itemsout[epoch] = '0'
items = ''.join(itemsout)
_,out = bin(int(items,2)+1).split('b')
temp = -int(out,2)
temp = float(temp) / (2 ** pointLocation)
f.write(str(temp) +"\n")
file是文件名,pointLocation是小数点位数,定点数都是32位