VC/MFC环境下Hex转S19文件的源码工具

版权申诉
4星 · 超过85%的资源 3 下载量 160 浏览量 更新于2024-11-16 收藏 161KB ZIP 举报
资源摘要信息:"该资源是一个使用VC/MFC(Visual C++/Microsoft Foundation Classes)框架开发的程序源代码压缩包,其主要功能是实现将一个或多个hex文件转换成S19文件格式。S19文件是一种记录程序代码和数据的文件格式,广泛应用于嵌入式系统开发中,特别是在以Motorola微处理器为基础的系统上。该程序支持添加地址偏移和地址填充,这意味着在转换过程中,用户可以为S19文件指定一个起始地址,并且在必要时可以添加填充数据以满足地址对齐的需求。转换后的所有S19文件内容将被整合到一个单独的文件中。" 知识点详细说明: 1. VC/MFC框架: - VC指的是Visual C++,它是Microsoft公司推出的一个集成开发环境(IDE),主要用于C++语言的开发。MFC则是Microsoft Foundation Classes的缩写,是一套用C++编写的类库,封装了部分Windows API,用于简化Windows应用程序的开发。 - 在VC/MFC框架中开发的程序通常拥有较为丰富的用户界面(UI),并且能够方便地调用Windows的各种功能。 2. hex文件格式: - hex文件是一种汇编语言源文件,其中包含了嵌入式系统编程中用于存储程序代码和数据的十六进制表示形式。通常,hex文件用于将编译后的程序通过编程器写入到微控制器(MCU)的存储器中。 - hex文件的格式包含了地址、记录类型、数据长度、实际数据和校验和等信息,是嵌入式开发中常见的标准格式之一。 3. S19文件格式: - S19文件格式,也称为S-record格式,是一种记录程序代码和数据的文本文件格式。它主要用于将机器代码和数据转换成ASCII码形式,便于传输和阅读。 - S19文件通常包含三部分:头部(S0或S1记录),数据记录(S2或S3记录)和结束记录(S5或S7记录)。每条记录以字符'S'开头,后面跟随一个数字表示记录类型,再后面是记录长度、地址、数据以及校验和。 - S19文件在摩托罗拉等公司生产的微处理器上非常流行,广泛用于嵌入式设备的程序和数据存储。 4. 文件转换功能: - 程序具备将多个hex文件转换为S19文件格式的能力,这意味着它能够解析hex文件中的数据和地址信息,并将其转化为S19格式的文件。 - 转换过程中可以设置地址偏移,即用户可以指定一个偏移量,将输出的S19文件中的地址都增加一个固定的值。这在处理不同的内存映射或程序加载地址时非常有用。 - 程序还支持地址填充功能,即在转换的S19文件中添加额外的数据,以保证地址按一定规则对齐。这在某些微处理器编程中是必要的,以满足其对地址对齐的要求。 5. 程序整合功能: - 转换完成后,用户可以选择将所有的S19文件内容合并到一个单独的文件中。这样便于文件的管理和后续的程序烧录工作。 6. 开发工具和环境: - 程序是用VC/MFC框架开发的,因此用户需要在安装有Microsoft Visual Studio的开发环境中打开和编译源代码文件hexToS19.sln。 - 程序的编译和运行可能依赖于特定的Windows开发库和工具,比如Visual C++库和MFC库。 7. 文件名称列表解析: - 压缩包包含的文件"hexToS19.sln"是Visual Studio的解决方案文件,它包含了项目的所有配置信息,如编译选项、依赖关系等。 - 文件"hexToS19"可能是可执行文件或者是一个包含编译结果的项目文件夹名称,具体需要解压文件包来确认。 总结: 该VC/MFC程序源代码压缩包是一个实用工具,为嵌入式系统开发者提供了一个方便、快捷的hex到S19文件格式转换方案。它通过地址偏移和地址填充的配置选项,增加了转换过程的灵活性。开发者可以在熟悉VC/MFC框架和Windows编程的基础上,进一步开发和优化该程序,以满足特定的应用需求。

import { Sha256 } from '@aws-crypto/sha256-js' import CryptoJs from 'crypto-js' import encHex from 'crypto-js/enc-hex' onmessage = async function (event) { const data = event.data // 获取文件数据 // chunk方式读取文件 const chunkSize: number = 1024 * 1024 // 每次读取1MB const fileSize: number = data.size // 文件大小 let offset: number = 0 // 偏移量 const createSha256Uint8Array32 = new Sha256() // SHA256 Unit8Array(32) const createSha1 = CryptoJs.algo.SHA1.create() // SHA1 Hex const createSha256 = CryptoJs.algo.SHA256.create() // SHA256 Hex const createSha512 = CryptoJs.algo.SHA512.create() // SHA512 Hex const createMD5 = CryptoJs.algo.MD5.create() // MD5 while (offset < fileSize) { const chunk = new Uint8Array(await data.slice(offset, offset + chunkSize).arrayBuffer()) // 读取chunkSize大小的文件块 const wordArray = CryptoJs.lib.WordArray.create(chunk) createSha256Uint8Array32.update(chunk) createSha1.update(wordArray) createSha256.update(wordArray) createSha512.update(wordArray) createMD5.update(wordArray) offset += chunkSize // 计算进度 // const progress = Math.min(100, Math.round((offset / fileSize) * 100)) // 计算进度 // console.log(progress) // 打印进度 // postMessage({ progress, offset, fileSize }) // 将进度发送给主线程 } const [sha256Uint8Array32, sha1, sha256, sha512, md5] = await Promise.all([ createSha256Uint8Array32.digest(), // SHA256 Unit8Array(32) encHex.stringify(createSha1.finalize()), // SHA1 Hex encHex.stringify(createSha256.finalize()), // SHA256 Hex encHex.stringify(createSha512.finalize()), // SHA512 Hex encHex.stringify(createMD5.finalize()), // MD5 ]) const obj = { md5, // MD5 sha1, // SHA1 Hex sha256, // SHA256 Hex sha512, // SHA512 Hex sha256Int8Array32: Array.from(new Int8Array(sha256Uint8Array32)), // SHA256 Int8Array(32) } console.log(obj) // 打印结果对象 postMessage(obj) // 将结果对象发送给主线程 } 增加功能计算 sm3

2023-06-07 上传