中文

.h 与 .hpp:有什么区别,应该使用哪一个?

最后更新: 26 Feb, 2026 在编写 C++ 程序时,尤其是大型项目,组织代码到多个文件中对于可读性和维护性至关重要。这通常涉及使用 头文件,其扩展名为 .h 或 .hpp。但这两者有什么区别,应该使用哪一个? 在本文中,我们将拆解 .h 与 .hpp 文件的差异,探讨它们的历史,并提供最佳实践指南。 理解 C++ 中的头文件 头文件包含 声明,如函数、类、常量和宏,您可以在多个源文件中包含它们。这些文件随后在 .cpp(C++ 源)文件中通过 #include 指令引入。 头文件的常见内容 类定义 函数声明 常量定义 宏 模板(在某些情况下) .h 文件 什么是 .h 文件? .h 文件是传统的 头文件,最早在 C 编程语言中广泛使用。它们仍然在 C 和 C++ 项目中用于声明接口。 使用示例: // mathutils.h #ifndef MATHUTILS_H #define MATHUTILS_H int add(int a, int b); int subtract(int a, int b); #endif 优点: 在 C 和 C++ 中都被普遍认可。 适用于同时包含 C 与 C++ 代码的项目。 缺点: 在 C++ 项目中可能导致文件是 C 风格还是 C++ 风格的歧义。 .
六月 10, 2025 · 2 分钟 · Shakeel Faiz

下载示例文件 - PDF、Excel、演示文稿及更多测试用例

最后更新: 26 Feb, 2026 需要用于测试的示例文件吗? 如果您正在寻找用于测试、开发或自动化工作流的可下载示例文件,此资源中心可让您即时获取高质量、真实的文档。每个示例下载文件均旨在帮助开发者、QA 工程师和学习者在无需从头创建虚拟内容的情况下验证功能。 从基础电子表格到详细的 PDF,您所需的一切均可免费下载 - 无需注册,毫不费力。 下载 PDF 测试文件 正在开发 PDF 查看器、转换器或表单处理程序吗?我们精心策划的PDF 测试文件下载栏目提供即用的文档,以验证布局渲染、文本提取等功能。 下载 PDF 示例文件 我们提供结构化的多页文档——因此当您需要下载 PDF 文件示例集以测试软件对各种布局和字体的兼容性时,这里应有尽有。 每个 PDF 下载测试文件都包含真实的数据、批注和表单,以确保准确的测试。如果您的工作流需要快速的测试 PDF 下载文件,只需几秒即可获取。 示例 Excel 与电子表格文件 需要带有公式、表格和图表的电子表格吗?下载 MS-Excel 支持的多种格式的测试数据。 下载电子表格示例文件 此集合包括: .xlsx、.xls 格式,适用于 Microsoft Excel 这些电子表格示例下载文件非常适合测试导入/导出以及公式引擎。 下载示例演示文稿文件 正在自动化 PowerPoint 工作流或构建演示文稿查看器?使用我们的示例下载文件进行幻灯片测试,以验证渲染引擎、动画或导出功能。 下载演示文稿文件 包含的格式: .pptx、.ppt .odp 非常适用于 QA 场景或开发环境,在这些环境中您需要可直接下载的文件来模拟真实的演示文稿。 更多文件格式即将上线 此免费示例下载文件集合持续扩展。我们即将加入以下内容: Word 文档:.docx、.odt 图像格式:.png、.jpg、.svg 电子书:.epub、.mobi 文本和数据:.json、.xml、.txt 我们的目标是让您更轻松地在开发和文档处理常用的每种格式中下载示例文件。 为什么使用这些示例下载文件? 完全免费且随时可获取 - 无需账户 适用于开发者、测试人员和培训师 专为手动和自动化测试设计 定期添加新格式 节省时间并提升生产力 立即获取文件 PDF 测试文件 Excel/电子表格文件 演示文稿示例 最后思考 无论您是在测试文件兼容性还是构建文档处理功能,拥有合适的示例下载文件都能让工作更轻松、更快捷。从 PDF 测试文件下载资源到 Excel 表格和幻灯片,这个不断增长的库帮助您省去繁琐工作,直接开始测试。
四月 24, 2025 · 1 分钟 · Shakeel Faiz

是否应该将您的 RAW 文件转换为 DNG?RAW 与 DNG:您需要了解的要点

最近更新: 26 Feb, 2026 作为摄影师,您经常需要在保留原始格式的 RAW 文件(例如 CR2、ARW)或将其转换为更通用的格式,如 DNG(数字负片) 之间做出选择。这个决定可能让人感到不知所措,尤其是当您刚入门且不完全了解权衡因素时。本文将探讨在决定是坚持使用相机原生 RAW 文件还是转换为 DNG 时需要考虑的关键因素。 保持 RAW 文件的理由 许多摄影师,尤其是那些重视相机原始、未修改数据的摄影师,倾向于将 RAW 文件保留为原生格式。RAW 文件,如 CR2(佳能) 和 ARW(索尼),提供最高的质量和最大的后期处理灵活性。这些格式包含所有未处理的图像数据,允许对曝光、白平衡以及图像的其他关键要素进行精确调整。 多位摄影师建议保持 RAW 文件完整,包括那些使用过老款相机的摄影师。例如,15 年前拍摄的佳能 DSLR 的 CR2 文件今天仍然同样可用,因为许多程序对旧相机格式具有向后兼容性。 此外,当您将 RAW 转换为 DNG 时,通常会丢弃元数据、专有的相机设置,甚至相机品牌的特定色彩配置文件,这可能导致图像质量出现细微但可察觉的差异。一些用户甚至报告说,转换为 DNG 会影响颜色,而原始 RAW 文件的颜色更为鲜艳。 那么 DNG 呢? 另一方面,DNG 也有其优势。它是一种开放的、非专有的格式,有人认为这使其在长期存储方面更安全。由于 DNG 在多种编辑软件中得到更广泛的支持,它相较于像 CR2 和 ARW 这样的专有 RAW 格式可以提供更高的兼容性。一些档案机构,如美国国会图书馆,推荐 DNG 作为长期保存图像的稳定格式。 如果您使用 Adobe Lightroom 或 Camera Raw 等软件,DNG 在减小文件大小和确保未来访问的更高稳定性方面尤其有用。它还支持无损压缩,并且可以嵌入原始 RAW 文件,以提供额外的安心保障。 然而,也存在一些注意事项。例如,将 RAW 文件转换为 DNG 会移除低分辨率的嵌入式 JPEG 预览,该预览通常更亮且更饱和。如果您已经习惯了相机 RAW 文件显示的丰富多彩的预览,可能会发现 DNG 的预览更暗且不够鲜艳。
四月 21, 2025 · 1 分钟 · Shakeel Faiz

了解 WAV 文件头:结构、格式及修复方法

最近更新:2025年4月16日 在处理音频文件时,尤其是类似 WAV 的格式,了解WAV 文件头至关重要。头部包含关于音频数据的关键信息,如其格式、采样率等。在本文中,我们将深入探讨 WAV 文件头的结构,解释其每个部分,并进一步了解如何修复损坏的头部。 什么是 WAV 文件? WAV(波形音频文件格式)是一种由 Microsoft 和 IBM 开发的标准音频文件格式。它存储原始的未压缩音频数据,广泛用于高质量音频录制和编辑。 一个 WAV 文件 包含两个主要部分: 头部 — 包含文件的元数据。 数据 — 包含实际的音频采样数据。 WAV 文件头的结构 WAV 文件头通常是文件的前 44 字节。它提供了关于如何解释音频数据的详细信息。以下是其结构的分解: 偏移(字节) 字段 大小(字节) 描述 0 块标识符 4 应为 “RIFF”,以指示文件格式。 4 块大小 4 文件大小减去 RIFF 标识和大小字段的 8 字节。 8 格式 4 应为 “WAVE”。 12 子块1 标识符 4 “fmt “(包含尾随空格)。 16 子块1 大小 4 格式块的大小(PCM 通常为 16)。 20 音频格式 2 格式代码(PCM/未压缩为 1)。 22 通道数 2 单声道 = 1,立体声 = 2,等等。 24 采样率 4 采样频率(例如 44100 Hz)。 28 字节率 4 SampleRate × NumChannels × BitsPerSample / 8。 32 块对齐 2 NumChannels × BitsPerSample / 8。 34 每样本位数 2 位深度(例如 16、24 或 32 位)。 36 子块2 标识符 4 “data” — 表示音频数据的开始。 40 子块2 大小 4 数据段中的字节数。 WAV 头部的可视化表示 +-----------------+---------+ | Chunk ID | "RIFF" | | Chunk Size | FileSize| | Format | "WAVE" | | Subchunk1 ID | "fmt " | | Subchunk1 Size | 16 | | Audio Format | 1 (PCM) | | Num Channels | 1/2 | | Sample Rate | 44100 | | Byte Rate | .
四月 3, 2025 · 2 分钟 · Shakeel Faiz

WAV 文件格式规范:您需要了解的一切

最后更新: 16 Apr, 2025 如果您正在处理数字音频,了解 WAV 文件格式规范 至关重要。WAV,全称 Waveform Audio File Format,是存储原始未压缩音频数据的最流行格式之一。在本文中,我们将拆解 WAV 文件格式 是什么、它的技术规格,以及它为何对音频专业人士和爱好者同样重要。 什么是 WAV 文件? WAV 文件是一种由 Microsoft 和 IBM 于 1991 年开发的音频文件格式。它基于 RIFF(资源互换文件格式) 结构,以标记的 “块”(chunks)方式存储数据。WAV 文件因通常包含 未压缩 PCM(脉冲编码调制) 音频而以高音质著称。 WAV 的突出特点 高音频保真度:无损、未压缩格式 支持多声道(单声道、立体声及更高声道数) 与大多数操作系统和音频编辑软件兼容 简单且可扩展的格式,可包含元数据 什么是 WAV 文件格式规范? WAV 文件格式规范 是一份技术蓝图,定义了音频数据在 WAV 文件中的组织和存储方式。它使用 RIFF 格式,并包含多个关键数据块,以实现高质量的音频存储。 RIFF 头在 WAV 文件中的作用是什么? RIFF 头至关重要,因为它标识文件为 WAV 文件并指定数据的结构和大小。它确保软件和音频播放器能够正确读取和解释该文件。 WAV 规范的核心组件 要理解 WAV 文件格式规范,需要仔细查看其结构。典型的 WAV 文件包含若干重要块: 1. RIFF 头 标识符:“RIFF” 文件大小:整体文件大小减去 8 字节 文件类型:“WAVE” 2.
四月 2, 2025 · 2 分钟 · Shakeel Faiz

什么是 DOCX 文件及其与 DOC 的区别?

最后更新: 2025年4月9日 DOCX 文件 是 Microsoft Word 使用的一种文档格式,是 Office Open XML (OOXML) 规范的一部分。DOC 是 Office 2007 之前使用的旧的二进制文件格式。与之相比,DOCX 更小、更安全,并支持高级功能。 请查看我们的详细指南:DOC 和 DOCX 的区别 什么是 DOCX 文件? DOCX 文件 是 Microsoft Word 用于存储文本、图像、表格和其他格式元素的文档文件格式。它于 Microsoft Office 2007 推出,是 Word 文档的默认文件格式,并且是 Office Open XML (OOXML) 标准的一部分。DOCX 文件在各个平台上得到广泛支持,使其成为创建和共享文档的可靠选择。 与基于二进制的旧 DOC 格式相比,DOCX 文件是基于 XML 结构构建的。此更改允许更好的压缩、改进的兼容性和在文件损坏时更容易恢复文件。 DOCX 文件的突出之处 轻量和压缩: DOCX 文件使用 ZIP 压缩,因此与 DOC 文件相比,尺寸更小,节省存储空间并加速文件传输。 丰富的格式选项: DOCX 支持高级格式功能,如样式、主题、表格、图像、图表和嵌入对象,使用户能够创建专业外观的文档。 跨平台兼容性: DOCX 文件可以在包括 Google Docs、LibreOffice 和 Apple Pages 等各种应用程序中打开和编辑,确保在多种设备和操作系统上的可访问性。
三月 26, 2025 · 1 分钟 · Shakeel Faiz

什么是 XML:全面指南

最后更新: 2025年3月25日 什么是 XML? XML(可扩展标记语言) 是一种用于存储、传输和重建数据的标记语言和文件格式。它提供了一种结构化的方法来编码信息,使其既可被人类读取,也可被机器读取。 XML 的主要特性 1. 由开放标准定义 由 万维网联盟(W3C) 于1998年根据 XML 1.0规范 建立。 遵循严格的规则以保证数据结构化且易于解释。 2. 设计目标 XML 的设计着重于在不同平台上的简洁性、普遍性和可用性。 采用基于文本的格式,便于阅读和编辑。 3. 支持 Unicode XML 支持 Unicode,允许存储和处理多语言文本。 4. 适用性 最初为文档创建,现在 XML 被广泛用于各个领域的数据表示,包括网络服务、API 和配置文件。 5. 模式和 API XML 结构可以使用文档类型定义(DTD)、 XML 架构(XSD) 或 Relax NG 来定义。 各种 API,如 DOM(文档对象模型) 和 SAX(简单 API for XML),支持 XML 处理。 6. XML 的常见用途 不同系统之间的数据交换(如网络服务、API)。 软件应用中的配置文件。 存储结构化信息(如 RSS 提要、SVG 图形、文档格式如 DOCX)。 网络开发(如 XHTML、SOAP、基于 AJAX 的应用)。 XML 概述 1.
三月 25, 2025 · 3 分钟 · Shakeel Faiz

适用于 Python、Java 和 JavaScript 的最佳 XML 解析器(附示例)

最后更新: 2025 年 3 月 25 日 XML(可扩展标记语言) 广泛用于数据存储、配置文件和 web 服务。高效解析 XML 对于处理结构化数据的开发者来说至关重要。本文将探索适用于 Python、Java 和 JavaScript 的最佳 XML 解析器,并为每种语言提供示例。 1. 在 Python 中解析 XML Python 提供了多种库来解析 XML 文件,每种都有其适用的用例。 1.1 xml.etree.ElementTree(内置库) xml.etree.ElementTree 是一个简单且高效的内置模块,用于解析 XML。 示例:解析 XML 文件 优点: 轻量且易于使用。 缺点: 在处理复杂 XML 结构时功能有限。 1.2 lxml(快速且功能丰富) lxml 是一个强大的库,基于 libxml2 C 库,提供速度和 XPath 支持。 示例:使用 lxml 解析 优点: 比 ElementTree 更快,支持 XPath。 缺点: 需要安装(pip install lxml)。 1.3 BeautifulSoup(最适合网页抓取) BeautifulSoup 主要用于 解析 HTML,但也支持 XML。
三月 21, 2025 · 2 分钟 · Shakeel Faiz

如何用 Python、Java 和 JavaScript 读取和编辑 XML 文件

最后更新:2025年3月25日 XML (可扩展标记语言) 被广泛用于存储和传输数据。无论您是初学者还是经验丰富的开发者,了解如何读取和编辑 XML 文件都是必不可少的。在本指南中,我们将介绍高效处理 XML 文件的基本和高级方法。 理解 XML 结构 一个 XML 文件由元素、属性和层次结构数据组成。以下是一个简单的 XML 示例: 读取 XML 文件 1. 使用 Python Python 的 xml.etree.ElementTree 模块允许简便地解析 XML。 xml.etree.ElementTree 是 Python 的内置模块,这意味着您无需单独安装它。它与 Python 一同预装,提供用于解析、修改和创建 XML 数据的便捷工具。 代码解析 这个 Python 脚本使用 xml.etree.ElementTree 来解析一个 XML 文件(books.xml)。它检索所有 元素,提取它们的、<author> 和 <price> 值,并打印出来。这使得结构化的 XML 数据读取变得更容易。 2. 使用 Java Java 提供 javax.xml.parsers 用于处理 XML。 javax.xml.parsers 是一个 Java 内置包,提供用于使用 DOM(文档对象模型)和 SAX(简单 API for XML)解析器解析 XML 的类。它被包含在 Java 标准库中,所以无需额外安装即可使用。 </section> <footer class="entry-footer"><span title='2025-03-20 00:00:00 +0000 UTC'>三月 20, 2025</span> · 1 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to 如何用 Python、Java 和 JavaScript 读取和编辑 XML 文件" href="https://blog-qa.fileformat.com/zh/programming/how-to-read-and-edit-xml-files-in-python-java-and-javascript/"></a> </article> <article class="post-entry"> <header class="entry-header"> <h2>阅读和编辑XML文件的新手指南 </h2> </header> <section class="entry-content-home"> 最后更新: 2025年3月25日 为什么学习XML编辑? XML (可扩展标记语言) 广泛用于软件应用程序、Web服务和配置文件中的数据存储和传输。然而,许多人在正确打开或修改XML文件时遇到困难。本指南将帮助初学者和开发人员学习如何高效地读取、编辑、验证和格式化XML文件。 打开XML文件的工具 1. 记事本 (Windows内置编辑器) 右键单击XML文件,选择 打开方式 > 记事本。 适用于快速编辑,但缺乏语法高亮功能。 2. Visual Studio Code (VS Code) 免费、轻量且功能丰富的代码编辑器。 提供语法高亮、自动格式化和XML验证扩展功能。 3. Microsoft Excel 能以结构化表格形式打开XML。 导航到 文件 > 打开 > 浏览,选择XML文件,然后选择 作为XML表格。 4. 在线XML编辑器 网站如 CodeBeautify、XMLGrid 和 XMLViewer 允许查看和编辑XML而无需安装软件。 适用于快速检查和格式化。 编辑XML:语法规则和最佳实践 遵循正确的标签结构 每个开始标签都必须有对应的结束标签。 <person> <name>John Doe</name> </person> 使用有意义的标签名 除非必要,避免使用诸如<item>或<data>这样的一般性标签。 确保嵌套正确 不正确的示例: <parent> <child1> <child2></child2> </child1> </parent> 正确的示例: <parent> <child1> <child2></child2> </child1> </parent> 转义特殊字符 使用<代表<,>代表>,&代表&。 使用XSD(XML模式定义)验证XML XML验证通过使用XSD文件定义规则来确保数据的完整性。 验证XML的步骤: 创建一个XSD文件(定义XML结构) </section> <footer class="entry-footer"><span title='2025-03-19 00:00:00 +0000 UTC'>三月 19, 2025</span> · 1 分钟 · Shakeel Faiz</footer> <a class="entry-link" aria-label="post link to 阅读和编辑XML文件的新手指南" href="https://blog-qa.fileformat.com/zh/web/a-beginner-guide-to-reading-and-editing-xml-files/"></a> </article> <footer class="page-footer"> <nav class="pagination"> <a class="prev" href="https://blog-qa.fileformat.com/zh/page/6/">« 上一页</a> <a class="next" href="https://blog-qa.fileformat.com/zh/page/8/">下一页 »</a> </nav> </footer> </main> <footer class="footer"> </footer> <a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor"> <path d="M12 6H0l6-6z" /> </svg> </a> <script> (function(i, s, o, g, r, a, m) {i['ContainerizeMenuObject'] = r; i[r] = i[r] || function() {(i[r].q = i[r].q || []).push(arguments)}, i[r].l = 1 * new Date(); a = s.createElement(o),m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.append(a)})(window, document, 'script', 'https://menu.containerize.com/scripts/engine.min.js?v=1.0.1', 'fileformat-zh'); </script> <script> let menu = document.getElementById('menu') if (menu) { menu.scrollLeft = localStorage.getItem("menu-scroll-position"); menu.onscroll = function () { localStorage.setItem("menu-scroll-position", menu.scrollLeft); } } document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener("click", function (e) { e.preventDefault(); var id = this.getAttribute("href").substr(1); if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) { document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({ behavior: "smooth" }); } else { document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView(); } if (id === "top") { history.replaceState(null, null, " "); } else { history.pushState(null, null, `#${id}`); } }); }); </script> <script> var mybutton = document.getElementById("top-link"); window.onscroll = function () { if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) { mybutton.style.visibility = "visible"; mybutton.style.opacity = "1"; } else { mybutton.style.visibility = "hidden"; mybutton.style.opacity = "0"; } }; </script> <script> document.getElementById("theme-toggle").addEventListener("click", () => { if (document.body.className.includes("dark")) { document.body.classList.remove('dark'); localStorage.setItem("pref-theme", 'light'); } else { document.body.classList.add('dark'); localStorage.setItem("pref-theme", 'dark'); } }) </script> </body> </html>