You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将FLASH存储器二进制文件转为JSON?解码报错求助

解决FLASH导出二进制文件转JSON/可读文件的问题

问题根源

FLASH导出的二进制文件是原始字节数据,并非UTF-8编码的文本文件。直接用utf-8解码会报错,因为其中包含不符合UTF-8编码规则的字节(比如报错中的0xe5不是合法的UTF-8续字节)。

可行解决方案

1. 将二进制转成可读的十六进制格式

如果只是需要查看二进制的内容,可以把字节转换成十六进制字符串,方便阅读:

fileName = "TST477 DeviceMemory.bin"
with open(fileName, mode='rb') as file:
    fileContent = file.read()

# 生成带空格分隔的十六进制字符串,可读性更强
hex_content = ' '.join(f'{byte:02x}' for byte in fileContent)
print(hex_content)

2. 将二进制转成可存入JSON的格式

JSON不支持直接存储二进制数据,可将二进制转成Base64编码的字符串(Base64是纯文本格式,可安全嵌入JSON):

import json
import base64

fileName = "TST477 DeviceMemory.bin"
with open(fileName, mode='rb') as file:
    fileContent = file.read()

# 二进制转Base64字符串
base64_str = base64.b64encode(fileContent).decode('utf-8')
# 封装成JSON
json_result = json.dumps({"flash_memory_data": base64_str}, indent=4)
print(json_result)

3. 解析成实际业务数据(需知道数据结构)

如果要得到有意义的可读数据,必须先明确FLASH存储的数据结构:比如每个字段的字节长度、数据类型(整数/浮点数/字符串)、字节序(大端/小端)。

举个示例(假设已知数据结构):

import struct

fileName = "TST477 DeviceMemory.bin"
with open(fileName, mode='rb') as file:
    fileContent = file.read()

# 假设前4字节是大端32位整数,接下来8字节是小端64位浮点数,最后10字节是ASCII字符串
# 使用struct.unpack解析格式:>I是大端32位无符号整数,<d是小端64位浮点数,10s是10字节字符串
int_val, float_val, str_val = struct.unpack('>I<d10s', fileContent[:22])
# 清理字符串中的空字节
str_val = str_val.decode('ascii').strip('\x00')

print(f"整数值: {int_val}")
print(f"浮点值: {float_val}")
print(f"文本内容: {str_val}")

关键提示

  • 若没有数据结构文档,可联系设备厂商获取FLASH存储的协议规范,或通过设备的固件代码反向推导数据格式。
  • 不要尝试用文本编码直接解码二进制数据,这几乎都会因编码不匹配报错。

内容的提问来源于stack exchange,提问作者TesterBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:40:32