C++Builder中怎样读写含有多个“\0” 的二进制文件?

LngDotin 2014-11-14 04:46:10
代码如下:
int mylen, writelen;
FILE *fp;
char *DataString;

fp = fopen(FileLabeledEdit->Text.c_str(), "rb");
fread(DataString, 512, 1, fp);
ShowMessage(DataString);
writelen = AnsiString(DataString).Length();
ShowMessage(writelen);
fclose(fp);

只显示了“\0” 以前的那些字符,请问正确的代码如何写?
...全文
402 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
EdmundLee 2014-11-15
  • 打赏
  • 举报
回复
字串本来就是以"\0"作为完结的标记, 所以楼主的问题可能有以下的原因 一) 这二进制文件包含了多于一个字串 二) 文件损坏了
bluesen 2014-11-15
  • 打赏
  • 举报
回复
如同楼上指出DataString是野指针。应该定义 char DataString[512]; 二进制数据显示和应用层有关,比如是图像还是声音还是其他文件? 一般显示每个字节: for(int i=0; i<512; i++){ printf("%02x ", (int)DataString[i]); }
lhy 2014-11-15
  • 打赏
  • 举报
回复
引用 6 楼 LngDotin 的回复:
楼上各位同仁好,大家误会我意思了,特别是五楼误会的最深。 我是想把含有N多个 \0 的二制文件读到一个字符型数组中或一个流中,先粗略显示一下,看看读没读正确,然后修改其中部分字节后再回写到原二进制文件中,类似 WinHex 的部分功能。
你想把煤当作种子种到地里,想通过这种方式看看煤的成色如何。想这样实现类似锅炉的功能。
hyz_cs 2014-11-15
  • 打赏
  • 举报
回复
引用 6 楼 LngDotin 的回复:
楼上各位同仁好,大家误会我意思了,特别是五楼误会的最深。 我是想把含有N多个 \0 的二制文件读到一个字符型数组中或一个流中,先粗略显示一下,看看读没读正确,然后修改其中部分字节后再回写到原二进制文件中,类似 WinHex 的部分功能。
我没有误会你的意思,你全按unsigned char 来处理就可以了.
gzliudan 2014-11-15
  • 打赏
  • 举报
回复
DataString是野指针
LngDotin 2014-11-15
  • 打赏
  • 举报
回复
楼上各位同仁好,大家误会我意思了,特别是五楼误会的最深。 我是想把含有N多个 \0 的二制文件读到一个字符型数组中或一个流中,先粗略显示一下,看看读没读正确,然后修改其中部分字节后再回写到原二进制文件中,类似 WinHex 的部分功能。
lhy 2014-11-14
  • 打赏
  • 举报
回复
DataString的长度不是512字节吗?
hyz_cs 2014-11-14
  • 打赏
  • 举报
回复
问题在于获取长度就错了,不是以'\0'结束的不能用AnsiString(DataString).Length();来获取长度了. char data[5] ={0x00,0x00,0x00,0x00,0x00}; fwrite(data,5,1,fp); 这样就写入5个0x00啦. 另外要写文件的话,打开文件是时候要用"wb";
送了两个宏(在线翻译和自动翻译),属于可选资源。 Passolo 是目前世界上最流行的软件本地化专业工具之一。它支持众多文件格式,包括可执行程序文件、资源文件和基于 XML 的文件。文本可以被翻译为多种语言,包括亚洲语系(Unicode 码)以及书写方式为从右向左的语言,比如希伯来语和阿拉伯语。 Passolo 的使用非常容易,因此优化了软件的本地化过程。使用者既不需要进行耗时和昂贵的培训,也不需要有任何编程经验。软件的本地化工作可以在不接触源代码情况下完成,甚至可以在软件的最终版本产生之前就可以开始软件的本地化工作。 在 Passolo ,翻译数据的编译、交换和处理都非常容易。使用它的模拟翻译功能可以在实际翻译之前检查软件是否适合进行本地化。 Passolo 包含多种所见即所得(WYSIWYG)编辑器来处理软件的用户界面,包括对话框、菜单、位图、图标和指针编辑器。用户界面的处理非常安全,绝对不会意外删除或者改变现有的元素或结构。 利用其内部的翻译记忆技术,Passolo 可以重用现有的翻译资源。即使某个程序不是用 Passolo 翻译的,它的文本还是可以被 Passolo 用来进行新项目的自动翻译。模糊匹配技术能搜索相似和精确匹配的文本,从而提高了翻译人员的工作效率,缩短了翻译周期。 软件的本地化是一个庞大工程的一部分,很多专家参与其,一般情况下,他们可能会使用不同的工具。而 Passolo 能够与所有主流翻译记忆系统交换数据,并支持常用的数据交换格式。 Passolo 的质量保障功能可以检查文本的拼写,自动识别被截断或者重叠的文本以及不正确的快捷键设置。很多在本地化过程可能出现的潜在错误可以得到避免或被 Passolo 识别出来。 针对大型及分散完成的工程,Passolo 提供有特殊的版本,可以让用户非常容易地与外部翻译人员进行数据交换。由于有免费的译员版可供使用,因此软件的授权费用得到了降低,同时还简化了与译员之间的工作流程。 Passolo 包含一个与 VBA 兼容的脚本引擎,并且支持 OLE。一些立刻可用的宏(可免费下载)为 Passolo 增添了许多简单实用的功能。使用内置的 IDE,用户也可以开发他们自己的本地化解决方案以适应特定软件的需要。 Passolo 可以通过微软和谷歌的翻译引擎直接进行在线翻译。 【宏简介】 除了原版自带的宏,本汉化版本还收录以下几个对汉化非常有用的宏。用户可以通过点击相应的图标按钮直接运行这些宏。 l 快捷键、终止符和加速器检查宏 用于 Passolo 翻译字串的快捷键、终止符和加速器的检查、添加和修改,使其和原文保持一致;并具有删除翻译字串的快捷键功能和内置可自定义的自动更新功能。 l 简繁体文转换宏 自动对 Passolo 字串列表进行简繁体文进行相互转换。支持从简繁体原文到简繁体翻译的转换以及简繁体翻译之间的相互转换。 l 在线翻译宏 利用在线翻译引擎自动翻译 Passolo 翻译列表的字串。并集成了快捷键、终止符、加速器检查宏,可在翻译后检查并纠正翻译的错误。 【附录】 可用 Passolo 本地化的文件格式一览表 * Windows 标准资源 (32 位和 64 位) 二进制文件 (EXE, DLL, OCX, SYS...) * Windows 标准资源 (16 位,比如 Windows 3.1) 二进制文件 (EXE, DLL, SYS...) * Windows 标准资源 RC 文件 (RC, RC2, DLG...) * Windows CE, Pocket PC 移动设备二进制文件 (EXE, DLL...) * XML 文件 包括 XLIFF 文件 (支持 XLIFF) * Microsoft .NET 资源 (Framework 1.x 到 3.x/WPF) 二进制文件 (EXE, DLL, 程序集) 资源文件 (RESX, RESOURCE...) * Borland Delphi/C++ Builder 二进制文件 (EXE, DLL, BPL) (包括对话框和菜单编辑器) * Java 资源 (所有平台 J2EE, J2SE 和 J2ME) 属性文件,源文件二进制文件,方案文件 * Palm 操作系统软件 * ODBC 数据库解析器 支持 ACCESS, Excel, SQL 服务器, Oracle, MySQL, IBM DB2 * Visual BASIC 6 二进制文件 * Visual BASIC 6 方案 (VBP) 和窗体 (FRM) 支持 WYSIWYG 编辑器以及从代码提取文本 * 通用文本文件解析器 支持许多不同的文件格式和编码 * 可移植对象文件 (PO) 解析器 * Microsoft Installer 文件解析器 支持所有 MSI 文件的表 * Microsoft Excel 文件解析器 支持所有 Excel 文件的表单 * XLIFF 配置文件 WYSIWYG 编辑器给 Windows 资源 * 用户定义的文件格式 高度结构化的文本文件二进制文件

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧