寻找高手用C# 重写这段C++代码
unsigned int r,i,n,e; char *fn=new char[30]; unsigned char *buf=new unsigned char[4000]; union ulc{uc c[4];unsigned long ul;}mlen; AnsiString s,s1; FILE *fp; ListBox1->Clear(); r=getlist(ck); Edit3->Text=r; e=r*24; Sleep(500); fp=fopen("filetmp.tmp","rb"); if(fp==NULL){ShowMessage("打不开文件");return;} fseek(fp,0,SEEK_SET); fread(buf,1,e,fp); fclose(fp); for(i=0;i<r;i++) { for(n=0;n<20;n++)fn[n]=buf[i*24+4+n]; fn[20]=0; for(n=0;n<4;n++)mlen.c[3-n]=buf[i*24+n]; s1=AnsiString(fn); s=s1+",长度:"+IntToStr(mlen.ul); ListBox1->Items->Insert(i,s); } remove("filetmp.tmp"); delete buf; delete fn;
我自己用C# 写了一个 但是打开之后都是乱码 而且 格式也不对
下边是我用C#写的
C# code
StreamReader sr = new StreamReader("filetmp.tmp", System.Text.Encoding.GetEncoding("GB2312")); //StreamReader sr = new StreamReader("filetmp.tmp", System.Text.Encoding.UTF8); string sss = sr.ReadToEnd(); Console.WriteLine(sss);
作者: pridescc 发布时间: 2011-06-16
\0\0>chaobiaogudong.dbf\0\0\0\0孤东抄表程序.bin\0\0\0\0\0\09萳ogo.bin\0\0\0\0\0\0\0\0\0\0\0\0\0脏chaobiao.dbf\0\0\0\0\0\0\0\0\02`测试程序.bin\0\0\0\0\0\0\0\0\0\0Ifoxuser.dbf\0\0\0\0\0\0\0\0\0\0\0;a34.dbf\0\0\0\0\0\0\0\0\0\0\0\0\0\0\05.dbf\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0檃2.dbf\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f乤1.dbf\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0纗抄表样板程序.bin\0\0\0\0\0\0`耡188.bin\0\0\0\0\0\0\0\0\0\0\0\0"
我已经选了GB了呀 为什么还是这样呢
作者: pridescc 发布时间: 2011-06-16
试试System.Text.ASCIIEncoding
作者: ghost5216 发布时间: 2011-06-16
试试System.Text.UnicodeEncoding
作者: ghost5216 发布时间: 2011-06-16
作者: bdmh 发布时间: 2011-06-16
首先要知道你文件的编码,读取时是按文本读还是按二进制读,c代码是按二进制读取,你可以试着用BinaryReader
我若是用二进制读取
作者: pridescc 发布时间: 2011-06-16
{
for(n=0;n<20;n++)fn[n]=buf[i*24+4+n];
fn[20]=0;
for(n=0;n<4;n++)mlen.c[3-n]=buf[i*24+n];
s1=AnsiString(fn);
s=s1+",长度:"+IntToStr(mlen.ul);
ListBox1->Items->Insert(i,s);
}
主要是这。代码不算难。楼主是可以搞定的。有一点楼主弄明白就好了。
这个里面的数据。并不是桉着顺序放的。只需要相应的转换就可以了。
作者: zanfeng 发布时间: 2011-06-16
作者: Icedmilk 发布时间: 2011-06-16
fn[20]=0;
fn[20]已经为0。要知道c#转换为字符。0是结束符。在这个字符之前才会转为文字。
byte[] fn = new byte[20];
byte[] buf = new byte[4000];
string s, s1;
FileStream fp = System.IO.File.Open("filetmp.tmp", FileMode.Open);
fp.Seek(0, SeekOrigin.Begin);
fp.Read(buf, 0, buf.Length);
int r = Console.Read();
for (int i = 0; i < r; i++)
{
for (int n = 0; n < 20; n++)
{
fn[n] = buf[i * 24 + 4 + n];
}
fn [20]=0;
string str = System.Text.Encoding.ASCII.GetString(fn);
//str好象就是你要的结果了。
for (int n = 0; n < 4; n++)
{
}
}
作者: zanfeng 发布时间: 2011-06-16
作者: pridescc 发布时间: 2011-06-16
C# code
fn[20]=0;
fn[20]已经为0。要知道c#转换为字符。0是结束符。在这个字符之前才会转为文字。
byte[] fn = new byte[20];
byte[] buf = new byte[4000];
string s, s1;
FileStream ……
中文全是问号。。。。。。。。。。
作者: pridescc 发布时间: 2011-06-16
作者: yzm888 发布时间: 2011-06-16
byte[] fn = new byte[20]; byte[] buf = new byte[4000]; string s, s1; FileStream fp = System.IO.File.Open("filetmp.tmp", FileMode.Open); fp.Seek(0, SeekOrigin.Begin); fp.Read(buf, 0, buf.Length); int r = Console.Read(); for (int i = 0; i < r; i++) { for (int n = 0; n < 20; n++) { fn[n] = buf[i * 24 + 4 + n]; } fn [20]=0; string str = System.Text.Encoding.ASCII.GetString(fn); //str好象就是你要的结果了。 for (int n = 0; n < 4; n++) { } }
这样还是不能显示汉字的 而且显示内容不全 希望继续补充
作者: pridescc 发布时间: 2011-06-16