Here’s a concise explanation of converting FRF (French Franc, pre-euro currency) to BIN (Binary file, often used in embedded systems, ROMs, or financial data dumps).
Depending on your exact context, I’ve outlined the two most likely scenarios.
If you simply need to strip headers:
.bin.with open("firmware.frf", "rb") as f:
data = f.read()
# Remove 128-byte footer, skip first 64 bytes
payload = data[64:-128]
with open("firmware.bin", "wb") as out:
out.write(payload)
import struct
import numpy as np
def frf_to_bin(input_frf_path, output_bin_path, data_type='float32', endian='little'):
"""
Convert FRF text file to binary BIN file. frf to bin
Parameters:
- input_frf_path: path to text file with one coefficient per line
- output_bin_path: output .bin file path
- data_type: 'float32', 'int16', 'int32' (quantization)
- endian: 'little' or 'big'
"""
# Step 1: Read coefficients from FRF file
coefficients = []
with open(input_frf_path, 'r') as f:
for line in f:
line = line.strip()
if line and not line.startswith('#'): # skip comments
try:
coeff = float(line)
coefficients.append(coeff)
except ValueError:
continue
print(f"Loaded len(coefficients) coefficients from FRF file.")
# Step 2: Convert to numpy array
coeff_array = np.array(coefficients, dtype=np.float32)
# Step 3: Quantize if needed
if data_type == 'int16':
# Scale to 16-bit range (-32768 to 32767)
max_val = np.max(np.abs(coeff_array))
if max_val > 0:
coeff_array = coeff_array / max_val # normalize
quantized = (coeff_array * 32767).astype(np.int16)
write_array = quantized
pack_format = '<h' if endian == 'little' else '>h'
elif data_type == 'int32':
max_val = np.max(np.abs(coeff_array))
if max_val > 0:
coeff_array = coeff_array / max_val
quantized = (coeff_array * 2147483647).astype(np.int32)
write_array = quantized
pack_format = '<i' if endian == 'little' else '>i'
else: # default float32
write_array = coeff_array
pack_format = '<f' if endian == 'little' else '>f'
# Step 4: Write binary file
with open(output_bin_path, 'wb') as bin_file:
for value in write_array:
bin_file.write(struct.pack(pack_format, value))
print(f"Successfully wrote len(write_array) coefficients to output_bin_path")