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

使用C# File.ReadAllBytes()读取Hex文件与Progisp显示值不一致问题

问题:Hex文件读取差异:Progisp vs C# File.ReadAllBytes()

我正在开发一款给MCU写入单页数据的程序,已成功将固定值0x11的128字节数据传输至MCU。现在想读取*.hex文件内容到byte[128]后再传输,但发现Progisp缓冲区显示的目标值与C#通过File.ReadAllBytes()读取的值不一致。

预期读取的真实值(Progisp显示):
预期值

C#读取的值:
C#读取值

用Progisp打开Hex文件时,缓冲区显示第一张图的内容;用NotePad++打开并通过Hex插件将ASCII转成Hex后,显示的内容与C#读取结果一致。请问这两款软件的差异是什么?

Hex文件的文本内容:

:100000000C942A000C9447000C9447000C94470071
:100010000C9447000C9447000C9447000C94470044
:100020000C9447000C9447000C9447000C94470034
:100030000C9447000C9471010C9447000C944700F9
:100040000C9447000C9447000C9447000C94470014
:100050000C94470011241FBECFE5D8E0DEBFCDBF12
:1000600010E0A0E6B0E0EEEAF3E002C005900D92E9
:10007000A03AB107D9F720E0A0EAB0E001C01D9294
:10008000A23AB207E1F70E949A010C94D5010C94B0
:100090000000009751F0019779F488B3816088BB24
:1000A00082E08A95F1F700C0089588B38E7F88BBFF
:1000B00082E08A95F1F700C00895009751F001970A
:1000C00079F488B3826088BB82E08A95F1F700C03A
:1000D000089588B38D7F88BB82E08A95F1F700C0D0
:1000E0000895009751F0019779F488B3846088BB34
:1000F00082E08A95F1F700C0089588B38B7F88BBB2
:1001000082E08A95F1F700C00895CF93C82F8FEF52
:100110008ABB6115710521F06130710531F009C0AC
:1001200080E090E00E94490004C081E090E00E94DD
:10013000490080E090E00E945D0081E090E00E9434
:10014000710082E08A95F1F700C0CBBB80E090E0BF
:100150000E9471008FEC97E00197F1F700C000005A
:1001600081E090E00E94710092E09A95F1F700C062
:10017000CF910895CF93E091A100E034A1F0C82F72
:10018000F0E0E05AFF4F808160E070E080580E940C
:10019000850061E070E08C2F0E9485008091A100B5
:1001A0008F5F8093A100CF910895CF93803108F0A5
:1001B00045C0643008F042C0C82F61110DC0E82F5F
:1001C000F0E0E05AFF4F808160E070E080580E94CC
:1001D0008500C093A10032C0613079F4E82FF0E0CF
:1001E000E059FF4F808160E070E080580E948500F8
:1001F00080E18C0F8093A10021C0623079F4E82F58
:10020000F0E0E058FF4F808160E070E080580E948D
:10021000850080E28C0F8093A10010C0633071F4E0
:10022000E82FF0E0E057FF4F808160E070E08058F9
:100230000E94850080E38C0F8093A100CF910895E8
:10024000009741F0019759F460E070E08CE00E9463
:100250008500089560E070E088E00E9485000895C0
:1002600060E070E081E00E9485008FE99FE00197E7
:10027000F1F700C000001092A10008952FEF80E771
:1002800092E0215080409040E1F700C0000087B329
:10029000876087BB60E070E088E30E94850081E0B2
:1002A00090E00E9420010E94300160E070E086E052
:1002B0000E9485001092A10008958BB18BB98AB17C
:1002C000886D8AB980B58E6A80BD10BC83E389B918
:1002D00008955D9BFECF8CB908955F9BFECF8CB1D6
:1002E00008951F920F920FB60F9211242F933F93F0
:1002F0004F935F936F937F938F939F93AF93BF932E
:10030000EF93FF93F8948CB18093A0000E94BA0001
:100310007894FF91EF91BF91AF919F918F917F91D1
:100320006F915F914F913F912F910F900FBE0F9062
:100330001F901895CF930E945D010E943E0160E0DE
:1003400087E00E94D50087B3886087BB88B3886048
:1003500088BB2FEF89E698E1215080409040E1F77B
:1003600000C000008FE40E94BA008EE40E94BA0030
:100370000E946D018093A000C0E005C08091A000A4
:100380000E946901CF5FCA30C8F32FEF8DE399E473
:10039000215080409040E1F700C0000088B3877F83
:0E03A00088BB80E090E0CF910895F894FFCFE5
:1003AE00000102030405060708090A0B0C0D0E0FC7
:1003BE00404142434445464748494A4B4C4D4E4FB7
:1003CE00101112131415161718191A1B1C1D1E1FA7
:1003DE00505152535455565758595A5B5C5D5E5F97
:00000001FF

差异分析

核心差异在于是否解析Intel Hex格式协议:

  • Progisp的处理逻辑
    Progisp是专门的MCU编程工具,它会完整解析Intel Hex文件的协议格式:

    • 识别每一行开头的:标记,解析每行的字节数、地址、记录类型、数据字段、校验和
    • 提取出每行中的实际数据字节(比如:100000000C942A000C9447000C9447000C94470071这一行,会提取0C 94 2A 00 0C 94 47 00 0C 94 47 00 0C 94 47 00这16个字节,忽略开头的标记、地址、类型和末尾的校验和)
    • 将所有提取出的数据字节按地址顺序整理,最终展示的是MCU实际要写入的原始二进制数据,也就是你看到的“预期值”。
  • C# File.ReadAllBytes()与NotePad++ Hex插件的处理逻辑
    File.ReadAllBytes()直接读取Hex文件的原始ASCII字节流:

    • 比如文件中的字符:、1、0这些ASCII字符,都会被转换成对应的字节值(比如:的ASCII码是0x3A,1是0x31)
    • NotePad++的Hex插件是把文件的ASCII文本内容直接转成Hex显示,本质和File.ReadAllBytes()读取的原始字节一致,所以两者结果相同。

简单来说:Progisp读取的是Hex文件解码后的数据内容,而C#和NotePad++读取的是Hex文件本身的ASCII编码字节。如果要在C#中得到和Progisp一致的结果,需要实现Intel Hex文件的解析逻辑,提取出每行中的数据字段,再拼接成目标byte数组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:15:35