如何计算128k/64k Hex文件的字节总和及对应xor校验值
Hex文件校验值可落地计算方法
适用场景
- 128k容量存储空间的Hex/二进制镜像,校验值填充起始地址为
0x1FFFC - 64k容量存储空间的Hex/二进制镜像,校验值填充起始地址为
0xFFFC - 计算目标:提取校验起始地址之前所有存储字节的16位累加和,计算该累加和与
0xFFFF的异或结果,用于校验位填充
核心计算规则
- 校验范围:从地址
0x0000开始,累加至校验起始地址的前一个字节,覆盖范围内所有有效存储字节 - 数值处理:累加总和仅保留低16位(超出65535的高位直接截断)作为最终存储的总和值;将该16位总和与
0xFFFF做异或运算,同样保留16位结果作为异或值 - 填充规则:校验起始地址开始的4字节空间内,按顺序放置2字节总和、2字节异或结果,字节序匹配目标硬件的存储规则即可
零安装可执行计算步骤
无需安装专业Hex编辑工具,使用Windows系统自带的PowerShell即可完成计算:
- 打开目标Hex/二进制镜像文件所在的文件夹,按住Shift在文件夹空白处点击鼠标右键,选择“在此处打开PowerShell窗口”
- 复制对应场景的代码块到PowerShell窗口,将代码内的文件名替换为实际目标文件名称,按回车运行即可得到计算结果
128k文件计算代码
# 替换引号内的内容为你的实际镜像文件名 $fileBytes = [System.IO.File]::ReadAllBytes("目标镜像文件名") $checkRangeEnd = 0x1FFFB $sum = 0 for ($addr = 0; $addr -le $checkRangeEnd; $addr++) { $sum += $fileBytes[$addr] } $sum16 = $sum -band 0xFFFF $xorResult = $sum16 -bxor 0xFFFF Write-Host "16位累加总和:0x$($sum16.ToString('X4'))" Write-Host "异或计算结果:0x$($xorResult.ToString('X4'))"
64k文件计算代码
仅需调整校验范围终点,其余逻辑与128k场景完全一致:
# 替换引号内的内容为你的实际镜像文件名 $fileBytes = [System.IO.File]::ReadAllBytes("目标镜像文件名") $checkRangeEnd = 0xFFFB $sum = 0 for ($addr = 0; $addr -le $checkRangeEnd; $addr++) { $sum += $fileBytes[$addr] } $sum16 = $sum -band 0xFFFF $xorResult = $sum16 -bxor 0xFFFF Write-Host "16位累加总和:0x$($sum16.ToString('X4'))" Write-Host "异或计算结果:0x$($xorResult.ToString('X4'))"
手动填充注意事项
- 拆分16位值为2字节存储时,严格遵循目标硬件的字节序要求:小端存储规则下低字节放低地址、高字节放高地址;大端存储规则下高字节放低地址、低字节放高地址
- 4字节填充顺序固定为先放2字节累加总和,再放2字节异或结果,不可颠倒
内容的提问来源于stack exchange,提问作者Alex Alexandru
相关产品推荐
相关产品推荐

