求问:如何使用C++将一个磁盘上二进制数据文件转化为十进制数据文件

chvalrous 2014-07-30 03:01:50
求问:磁盘上有个二进制数据文件(里面存储均为数字),如何使用C++程序将其转化为十进制数据文件?跪求代码,非常感谢。
...全文
374 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2014-08-03
  • 打赏
  • 举报
回复
ASCII码格式
  • 打赏
  • 举报
回复
用fread读入内存后调用以下函数会转换为字符串二进制表示。

#include <stdint.h>
std::string ToBinaryString(const uint8_t* buf,int len)
{
	int output_len = len*8;
	std::string output;
	const char* m[] = {"0","1"};

	for(int i = output_len - 1,j = 0; i >=0 ; --i,++j)
	{
		output.append(m[((uint8_t)buf[j/8] >> (i % 8)) & 0x01],1);
	}
	return output;
}
http://blog.csdn.net/infoworld/article/details/37692701
「已注销」 2014-08-03
  • 打赏
  • 举报
回复
引用 14 楼 lm_whales 的回复:
首先要清楚文件里, 储存的数据的类型,是int,long,long long 还是 float,double 其次文件有无字节序(大小端)问题 这两个问题解决了 直接按照数据类型定义一个定长数据,或者数组一次性读入,或者分批读入全部文件。 需要的话,读取以后,先转换一下字节顺序 fopen,二进制读方式,打开文件,fread 读取文件,fclose 关闭文件 然后 转换成十进制 ACII格式的数据,输出到文本文件中去。 fopen,文本写方式,打开文件,fprintf 写入文件,fclose 关闭文件。 基本上就可以了 具体可以了解一下 fopen,fread,fwrie,fclose , fprintf ,fscanf 这些C流式文件读写,打开,关闭函数 这些都是C标准库的函数,使用的时候 #include <stdio.h> 就可以了 C++ 可以用C++流 std::fstream ,std::ifstream,std::ofstream 做同样的事情。 使用的时候 #include <fstream>
+1
lm_whales 2014-08-03
  • 打赏
  • 举报
回复
因为不清楚数据类型,所以不可能直接给出代码
lm_whales 2014-08-03
  • 打赏
  • 举报
回复
首先要清楚文件里, 储存的数据的类型,是int,long,long long 还是 float,double 其次文件有无字节序(大小端)问题 这两个问题解决了 直接按照数据类型定义一个定长数据,或者数组一次性读入,或者分批读入全部文件。 需要的话,读取以后,先转换一下字节顺序 fopen,二进制读方式,打开文件,fread 读取文件,fclose 关闭文件 然后 转换成十进制 ACII格式的数据,输出到文本文件中去。 fopen,文本写方式,打开文件,fprintf 写入文件,fclose 关闭文件。 基本上就可以了 具体可以了解一下 fopen,fread,fwrie,fclose , fprintf ,fscanf 这些C流式文件读写,打开,关闭函数 这些都是C标准库的函数,使用的时候 #include <stdio.h> 就可以了 C++ 可以用C++流 std::fstream ,std::ifstream,std::ofstream 做同样的事情。 使用的时候 #include <fstream>
我看你有戏 2014-08-03
  • 打赏
  • 举报
回复
引用 楼主 chivalrousli 的回复:
求问:磁盘上有个二进制数据文件(里面存储均为数字),如何使用C++程序将其转化为十进制数据文件?跪求代码,非常感谢。
二进制转成10进制,10进制写到文件里面,跟二进制也还是一样的啊, 楼主的意思应该是把二进制转成十进制,然后把十进制转成字符串的方式写到文件里面吧
xiaohuh421 2014-08-01
  • 打赏
  • 举报
回复
那你要按什么转换呢? 1Byte还是4Byte? 当然, 不管是1Byte几个Bytes, 都可以使用字符串格式化函数格式成10进制的字符串. 比如你按1Bytes显示 BYTE data; fread(&data, 1,1 pFile); //从文件读取一个字节 int val = data; char buf[0x10] = {0}; sprintf(buf, "%d", val); //把读取到的数据格式化到字符串中 fwrite(buf, 1,1, pWriteFile); //把数据写入到另一个文件中. 我觉得你应该使用UtrlEdit这样的编辑器, 直接以16进制方式显示你的数据文件, 方便分析.
chvalrous 2014-08-01
  • 打赏
  • 举报
回复
引用 6 楼 xiaohuh421 的回复:
文件中的数据本就是二进制. 没有10进制,16进制的说法. 除非你需要把 这些二进制 ,转换成字符串显示, 即可以用记事本这样的工具打开,直接看到数据的东西. 否则是不需要转换的.
你好,我本意就是转换成能够用记事本看到数据的文件,都转化成10进制数据。
xiaohuh421 2014-08-01
  • 打赏
  • 举报
回复
文件中的数据本就是二进制. 没有10进制,16进制的说法. 除非你需要把 这些二进制 ,转换成字符串显示, 即可以用记事本这样的工具打开,直接看到数据的东西. 否则是不需要转换的.
131341 2014-08-01
  • 打赏
  • 举报
回复
第一次加入这个论坛试图回答下哈。 由于文件有1M以上,可以考虑用内存映射文件读取文件。 先CreateFile打开文件,随之CreateFileMapping创建个内存映射对象。 再MapViewOfFile 得到第一个字节的指针lpMemory。 之后就用这个指针读写文件。 随后UnMapViewOfFile,CloseHandle了。 ps:把二进制文件十进制显示有什么用途,况且1M以上的。
131341 2014-08-01
  • 打赏
  • 举报
回复
引用 8 楼 xiaohuh421 的回复:
那你要按什么转换呢? 1Byte还是4Byte? 当然, 不管是1Byte几个Bytes, 都可以使用字符串格式化函数格式成10进制的字符串. 比如你按1Bytes显示 BYTE data; fread(&data, 1,1 pFile); //从文件读取一个字节 int val = data; char buf[0x10] = {0}; sprintf(buf, "%d", val); //把读取到的数据格式化到字符串中 fwrite(buf, 1,1, pWriteFile); //把数据写入到另一个文件中. 我觉得你应该使用UtrlEdit这样的编辑器, 直接以16进制方式显示你的数据文件, 方便分析.
对。说的对。如果你是想把内存中的二进制数值转换成十进制数值的我想基本mei可能
赵4老师 2014-08-01
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
chvalrous 2014-07-31
  • 打赏
  • 举报
回复
代码还是蛮简单的,当时处理时候出现问题了。。。感谢楼上回复的那位。
  • 打赏
  • 举报
回复
这个网上一大堆代码,自己百度
引用 3 楼 chivalrousli 的回复:
[quote=引用 2 楼 ilikehigame 的回复:] 这个无非就是文件读写的问题,一二进制流的形式读取文件转换之后在写文件操作
求代码,将二进制数据分割为short型并写入文件。[/quote]
chvalrous 2014-07-30
  • 打赏
  • 举报
回复
引用 2 楼 ilikehigame 的回复:
这个无非就是文件读写的问题,一二进制流的形式读取文件转换之后在写文件操作
求代码,将二进制数据分割为short型并写入文件。
  • 打赏
  • 举报
回复
这个无非就是文件读写的问题,一二进制流的形式读取文件转换之后在写文件操作
chvalrous 2014-07-30
  • 打赏
  • 举报
回复
该二进制数据文件大小约为1M。

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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