100分 求救c# 写出的二进制文件中 string型 在C++中如何读取

maoning 2009-02-19 05:53:55
c# 写出的二进制文件中 string型 在C++中如何读取,

c#中
FileStream fs = new FileStream(saveFileName, FileMode.CreateNew, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);

bw.Write(Convert.ToString(dtable.Rows[i][0]));
bw.Write(Convert.ToDouble(dtable.Rows[i][1]));
bw.Write(Convert.ToDouble(dtable.Rows[i][2]));
bw.Write(Convert.ToDouble(dtable.Rows[i][3]));
bw.Write(Convert.ToDouble(dtable.Rows[i][4]));
bw.Write(Convert.ToDouble(dtable.Rows[i][5]));

在c++中
FILE *fp;
CString sPmFile=_T("d:\\ffb\\T-GL.dat");
if((fp = fopen(sPmFile,"rb")) == NULL)
{
return ;
}

double a1,a2,a3,a4,a5,a6,a7,a8;
int b1,b2,b3;
char ;
fread(strJdname,sizeof(char),128,fp);
fread(&a1,sizeof(double),1,fp);
fread(&a2,sizeof(double),1,fp);
fread(&a3,sizeof(double),1,fp);
fread(&a4,sizeof(double),1,fp);
fread(&a5,sizeof(double),1,fp);

我试过。别的数据类型double int 都行。 string型的数据不知道怎么读取 strJdname[128]的长度怎么定啊?
如果吧string型 屏蔽掉。 剩下的double 和int 都能顺利读出来?

...全文
173 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
feifeiyiwen 2009-02-20
  • 打赏
  • 举报
回复
看看
leez0301 2009-02-20
  • 打赏
  • 举报
回复
你这是C语言的文件读取,并非C++的文件流读取。
你问的是不是那个动态大小怎么确定? 那个可以取文件的长度属性。
一般情况下在这里可以用容器来做,vector,string都行
你也可以换一个文件读取函数fputs和fgets试一下,专门用于字符串读取的,简单好用。

函数名: fputs
功 能: 送一个字符串到一个流中
用 法: int fputs(char *string, FILE *stream);

下面的例子将一句字符串输出到屏幕;
#include <stdio.h>
  int main(void)
  {
  /* write a string to standard output */
  fputs("Hello world\n", stdout);
  return 0;
  }
zgke 2009-02-20
  • 打赏
  • 举报
回复
在C#里 string==char[N] 可不是128...
zgke 2009-02-20
  • 打赏
  • 举报
回复
bw.Write(Convert.ToString(dtable.Rows[i][0]));
bw.Write(Convert.ToDouble(dtable.Rows[i][1]));
bw.Write(Convert.ToDouble(dtable.Rows[i][2]));
bw.Write(Convert.ToDouble(dtable.Rows[i][3]));
bw.Write(Convert.ToDouble(dtable.Rows[i][4]));
bw.Write(Convert.ToDouble(dtable.Rows[i][5]));

如果不知道STRING长度...年可以从后面向前取一次取 byte[8] 取5次 然后最后的是STRING
never_grow_old 2009-02-20
  • 打赏
  • 举报
回复
FILE *fp;
CString sPmFile=_T("d:\\ffb\\T-GL.dat");
if((fp = fopen(sPmFile,"rb")) == NULL)
{
return ;
}

double a1,a2,a3,a4,a5,a6,a7,a8;
int b1,b2,b3;
//应该是这个样子吧。
char strJdname[128];

fread(strJdname,sizeof(char),128,fp);
fread(&a1,sizeof(double),1,fp);
fread(&a2,sizeof(double),1,fp);
fread(&a3,sizeof(double),1,fp);
fread(&a4,sizeof(double),1,fp);
fread(&a5,sizeof(double),1,fp);
maoning 2009-02-20
  • 打赏
  • 举报
回复
真的没有人知道吗
maoning 2009-02-20
  • 打赏
  • 举报
回复
真的没有人知道吗
wuyi8808 2009-02-19
  • 打赏
  • 举报
回复
用 UltraEdit 之类的十六进制编辑器看看写出的二进制文件的内容。
maoning 2009-02-19
  • 打赏
  • 举报
回复
怎么解决呢 或者在c#中怎样改写一下呢
wuyi8808 2009-02-19
  • 打赏
  • 举报
回复
可能是 Unicode 的问题.
悔说话的哑巴 2009-02-19
  • 打赏
  • 举报
回复
比我还快哦

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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