有一个DAT文件 未知其数据结构,只知道它是由二维数组组成的,能用VC把他读取出来吗?谢谢告知~
展开全部
windows 下使用VC++6.0编写的一个示例
#include <stdio.h>
#include <stdlib.h>
#define LINES 320
#define COLS 240
int main(int argc, char* argv[])
{
FILE *fpDat = NULL;
FILE *fpAscii = NULL;
unsigned short nNums[LINES][COLS] = { 0 };
int i, j;
fpDat = fopen("D:\\mydat.dat", /* 这里修改成你自己的dat文件的完整路径 */
"rb"); /* 这里是打开方式, 通过你的描述, 你的dat文件可能是二进制格式的
(用记事本打开是乱码), 因此指定打开方式是rb */
if (NULL == fpDat) {
perror("read dat error(fopen)");
system("pause>nul");
exit(EXIT_FAILURE);
}
fpAscii = fopen("ascii.txt", "w"); /* 这里要写成ascii格式(文本文件),
所以指定写入方式是w(文本模式)而非wb(二进制模式) */
if (NULL == fpAscii) {
fclose(fpDat);
perror("creat text file error(fopen)");
system("pause>nul");
exit(EXIT_FAILURE);
}
fseek(fpDat, 834, SEEK_SET); /* 移动文件位置指针到指定地址偏移, 这里你可以根据
fseek的返回值来判断是否移动成功从而进行进行相应的错误处理 */
if ( LINES * COLS !=
fread(nNums, sizeof(unsigned short), LINES * COLS, fpDat) ) { /* 以二进制格式读取数据到缓冲区 */
fclose(fpDat);
fclose(fpAscii);
perror("read dat error(fread)");
exit(EXIT_FAILURE);
}
for (i = 0; i < LINES; i++) {
for (j = 0; j < COLS; j++) {
fprintf(fpAscii, "%hu ", nNums[i][j]);
}
fprintf(fpAscii, "\r\n");
}
fclose(fpDat);
fclose(fpAscii);
fputs("complete", stdout);
system("pause>nul");
return 0;
}
如果使用windows API的话也可以先用ReadFile读取数据到数组中, 然后用WriteFile写入到文件。
#include <stdio.h>
#include <stdlib.h>
#define LINES 320
#define COLS 240
int main(int argc, char* argv[])
{
FILE *fpDat = NULL;
FILE *fpAscii = NULL;
unsigned short nNums[LINES][COLS] = { 0 };
int i, j;
fpDat = fopen("D:\\mydat.dat", /* 这里修改成你自己的dat文件的完整路径 */
"rb"); /* 这里是打开方式, 通过你的描述, 你的dat文件可能是二进制格式的
(用记事本打开是乱码), 因此指定打开方式是rb */
if (NULL == fpDat) {
perror("read dat error(fopen)");
system("pause>nul");
exit(EXIT_FAILURE);
}
fpAscii = fopen("ascii.txt", "w"); /* 这里要写成ascii格式(文本文件),
所以指定写入方式是w(文本模式)而非wb(二进制模式) */
if (NULL == fpAscii) {
fclose(fpDat);
perror("creat text file error(fopen)");
system("pause>nul");
exit(EXIT_FAILURE);
}
fseek(fpDat, 834, SEEK_SET); /* 移动文件位置指针到指定地址偏移, 这里你可以根据
fseek的返回值来判断是否移动成功从而进行进行相应的错误处理 */
if ( LINES * COLS !=
fread(nNums, sizeof(unsigned short), LINES * COLS, fpDat) ) { /* 以二进制格式读取数据到缓冲区 */
fclose(fpDat);
fclose(fpAscii);
perror("read dat error(fread)");
exit(EXIT_FAILURE);
}
for (i = 0; i < LINES; i++) {
for (j = 0; j < COLS; j++) {
fprintf(fpAscii, "%hu ", nNums[i][j]);
}
fprintf(fpAscii, "\r\n");
}
fclose(fpDat);
fclose(fpAscii);
fputs("complete", stdout);
system("pause>nul");
return 0;
}
如果使用windows API的话也可以先用ReadFile读取数据到数组中, 然后用WriteFile写入到文件。
展开全部
用VC和MATLAB都可以
用fopen打开文件,比如fp=fopen("*.dat","r");
然后你定义一个数组或者是结构体。如果你只需要读里面的数字,就定数字数组;只需要字母,就定义字符串数组;所有数据(仅简单包括字符及数值)都需要的话,就定义个结构体,结构体包括数字及字符两种格式。用scanf就可以
如果数据结构太过于混乱,就只能按位读了……。
告诉我你需要里面什么类型的数据~西米日同学~!
VC++有别的办法
用fopen打开文件,比如fp=fopen("*.dat","r");
然后你定义一个数组或者是结构体。如果你只需要读里面的数字,就定数字数组;只需要字母,就定义字符串数组;所有数据(仅简单包括字符及数值)都需要的话,就定义个结构体,结构体包括数字及字符两种格式。用scanf就可以
如果数据结构太过于混乱,就只能按位读了……。
告诉我你需要里面什么类型的数据~西米日同学~!
VC++有别的办法
更多追问追答
追问
数字数组就好,用VC++怎么解决啊 最好有源代码
追答
LPBYTE lpPoint = new BYTE[ 1024 ];
::ReadFile(lpPoint);
int *a=lpPoint;
printf("%d",a);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询