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

如何用Matlab以十六进制逐位读取专有格式文件提取浮点数据?

可行,用Matlab以十六进制读取原始数据完全避免信息丢失

核心原理

直接以二进制模式读取文件的原始字节,跳过文本编码转换步骤,所有原始数据都会被完整保留,不会出现因字符不兼容导致的信息丢失。Matlab原生支持二进制文件操作,完全能实现这个需求。

具体实现脚本

以下是完整的Matlab脚本,包含文件读取、十六进制转换、目标数据提取的步骤:

% 1. 打开目标文件(二进制模式,禁止编码转换)
fileID = fopen('你的文件路径', 'rb');
if fileID == -1
    error('文件打开失败,请检查路径');
end

% 2. 读取全部原始字节为无符号8位整数数组
rawBytes = fread(fileID, '*uint8');
fclose(fileID);

% 3. 将字节数组转换为连续的十六进制字符串
hexStr = dec2hex(rawBytes)';
hexStr = hexStr(:)'; % 转为一维字符串,方便后续匹配

% 4. 定义已知的浮点数-十六进制映射表
targetMap = containers.Map(...
    {'803F', '0040', '4040', '8040', 'A040', 'C040', 'E040', '0041', '1041'}, ...
    {1, 2, 3, 4, 5, 6, 7, 8, 9});

% 5. 查找并提取目标数据(按双字节匹配,对应4位十六进制)
matchTokens = regexp(hexStr, '([0-9A-F]{4})', 'match');
extractedValues = [];
for chunk = matchTokens
    hexChunk = chunk{1};
    if isKey(targetMap, hexChunk)
        extractedValues = [extractedValues, targetMap(hexChunk)];
    end
end

% 输出结果
disp('提取到的目标浮点数:');
disp(extractedValues);

注意事项

  • 如果文件中目标数据的字节序和你提供的映射相反(比如存储为小端,映射是大端),可以修改匹配逻辑,反转每个双字节的顺序:
    % 反转字节序的匹配方式
    matchTokens = regexp(hexStr, '([0-9A-F]{2})([0-9A-F]{2})', 'tokens');
    extractedValues = [];
    for token = matchTokens
        reversedHex = [token{1,2}, token{1,1}]; % 交换两个字节的十六进制字符串
        if isKey(targetMap, reversedHex)
            extractedValues = [extractedValues, targetMap(reversedHex)];
        end
    end
    
  • 可以根据实际需求调整读取范围(比如只读取文件的某一部分),修改fread的参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:45:18