def hex_mchip_f32_to_hex_ieee_f32(src): """ Функция преобразования float MICROCHIP 32 to IEEE float32 seee_eeee emmm_mmmm mmmm_mmmm mmmm_mmmm - по стандарту 0 1 2 3 -4 -3 -2 -1 eeee_eeee smmm_mmmm mmmm_mmmm mmmm_mmmm - микрочиповский формат """ src_list = src.split(' ') int_list = list('') for i in src_list: for j in i: int_list.append(xint_module.hex2int(j)) # к обратному преобразованию готово # выделяем экспаненту extracted_exp = int_list[1] + int_list[0] * 16 # мантисса mantissa = int_list[-1] + \ int_list[-2] * 16 + \ int_list[-3] * 256 + \ int_list[-4] * 16 * 256 + \ int_list[-5] * 256 * 256 + \ (int_list[-6] & 7) * 16 * 256 * 256 mantissa = float(mantissa) / m.pow(2, 23) + 1 # полсностью в скобках result = mantissa * m.pow(2, (extracted_exp - 127)) if int_list[-6] & 8 != 0: result = -result return result
def hex_ieee_f32_str_to_float(src): """ seee_eeee emmm_mmmm mmmm_mmmm mmmm_mmmm - по стандарту """ src_list = src.split(' ') int_list = list('') for i in src_list: for j in i: int_list.append(xint_module.hex2int(j)) # к обратному преобразованию готово extracted_exp = int_list[2] + int_list[1] * 16 + int_list[0] * 16 * 16 extracted_exp >>= 3 extracted_exp &= 255 # мантисса mantissa = int_list[-1] + int_list[-2] * 16 + int_list[-3] * 16 * 16 + \ int_list[-4] * 16 * 16 * 16 + \ int_list[-5] * 16 * 16 * 16 * 16 + (int_list[-6] & 7) * 16 * 16 * 16 * 16 * 16 mantissa = float(mantissa) / m.pow(2, 23) + 1 # полсностью в скобках summaryo = mantissa * m.pow(2, (extracted_exp - 127)) if int_list[0] >= 9: summaryo = -summaryo return summaryo