BinaryReader读取二进制文件的字符时怎么得出的都是Base64的东西,怎么样得到它真正的内容

问题描述

我用BinaryReader读取shapefile文件的.dbf文件,.dbf文件由头文件和实体内容组成,读取头文件的内容都对,但是在读取实体内容时(它是由一条条记录项组成),读出来的都不是想要的内容。这是头文件的描述位置内容说明0-1011个字节记录项名称,是ASCII码值。111个字节记录项的数据类型,是ASCII码值。(B、C、D、G、L、M和N,具体的解释见表2.9)。12-154个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。161个字节记录项长度,二进制型。171个字节记录项的精度,二进制型。18-192个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。201个字节工作区ID。21-3010个字节保留字节,用于以后添加新的说明性信息时使用,这里用0来填写。311个字节MDX标识。如果存在一个MDX格式的索引文件,那么这个记录项为真,否则为空。这是表2.9代码数据类型允许输入的数据B二进制型各种字符。C字符型各种字符。D日期型用于区分年、月、日的数字和一个字符,内部存储按照YYYYMMDD格式。G(GeneralorOLE)各种字符。N数值型(Numeric)-.0123456789L逻辑型(Logical)?YyNnTtFf(?表示没有初始化)。M(Memo)各种字符。这是我读取的代码://读取dbf文件//读取头文件publicvoidReadHerder(){version=binaryfiledbf.ReadByte();for(inti=0;i<3;i++){date[i]=binaryfiledbf.ReadByte();}RecordNum=binaryfiledbf.ReadInt32();HerderByteNum=binaryfiledbf.ReadInt16();fieldscount=(HerderByteNum-33)/32;//记录项个数,不属于记录项信息描述数组RcordByteNum=binaryfiledbf.ReadInt16();for(inti=0;i<2;i++){Reserved1[i]=binaryfiledbf.ReadByte();}Flag4s=binaryfiledbf.ReadByte();EncrypteFlag=binaryfiledbf.ReadByte();for(inti=0;i<12;i++){Unused[i]=binaryfiledbf.ReadByte();}MDXFlag=binaryfiledbf.ReadByte();LDriID=binaryfiledbf.ReadByte();for(inti=0;i<2;i++){Reserved2[i]=binaryfiledbf.ReadByte();}//未读完头文件,还有记录项信息描述数组和Terminate//读取记录项信息数组描述for(intj=0;j<fieldscount;j++)//读取一条记录中的每一个记录项的信息{for(inti=0;i<11;i++){name[i]=binaryfiledbf.ReadByte();}fieldType=binaryfiledbf.ReadByte();for(inti=0;i<4;i++){Reserved3[i]=binaryfiledbf.ReadByte();}fieldLength=newbyte[fieldscount];fieldLength[j]=binaryfiledbf.ReadByte();decimalCount=binaryfiledbf.ReadByte();for(inti=0;i<2;i++){Reserved4[i]=binaryfiledbf.ReadByte();}workID=binaryfiledbf.ReadByte();for(inti=0;i<10;i++){Reserved5[i]=binaryfiledbf.ReadByte();}mDXFlag1=binaryfiledbf.ReadByte();}Terminate=binaryfiledbf.ReadByte();}//读取实体信息publicvoidReadContent(){NameStr=newstring[RecordNum];//FileStreama=newFileStream("\StorageCard\a.txt",FileMode.Open);//string[]myStr=newstring[RcordNum];dbfName=newstring[RecordNum,fieldscount];//用来存取每一条记录中的每一个记录项的值for(inti=0;i<RecordNum;i++)//每一条记录开始读取{DeleteFlag=binaryfiledbf.ReadByte();//这是每一条记录中开头的一小空格for(intj=0;j<fieldscount;j++)//每一条记录项开始读取{intchangefieldscount=Convert.ToInt32(fieldLength[j]);//将字节转换为整型byte[]temp=binaryfiledbf.ReadBytes(changefieldscount);dbfName[i,j]=BitConverter.ToString(temp);//Encodinga=Encoding.ASCII;//Encodingb=Encoding.Unicode;//Encoding.Convert(a,b,temp);//dbfName[i,j]=BitConverter.ToString(temp);}}for(inti=0;i<RecordNum;i++){NameStr[i]=dbfName[i,0];}binaryfiledbf.Close();filedbf.Close();}代码贴完,问题就出在dbfName[i,j]这个得出来的是另一种编码的东西,不是我想要的字符串的真正内容。各位高手能帮我看看怎么解决么?

解决方案

解决方案二:
网上有Base64编码和解码的源码,可搜下
解决方案三:
MD5/Base64/DES是常用来对用户身份验证的算法,本人陆续公开了自己常用的这三种算法的源代码,不足之处,希望大家批评指正。

时间: 2024-09-24 04:25:43

BinaryReader读取二进制文件的字符时怎么得出的都是Base64的东西,怎么样得到它真正的内容的相关文章

运行时无法运行-C++read读取二进制文件

问题描述 C++read读取二进制文件 #include#include#include#include#include""stdlib.h""using namespace std;const char* file=""file.dat"";//===================================================class plaint{private:string name;string

c++-C++ 读取输入流到字符指针

问题描述 C++ 读取输入流到字符指针 int main(){ char *c; cin>>c; cout<<c; return 0;}程序会崩溃,但是把char *c;改成 char *c = new char[1];就可以运行,求大神给解释一下. 解决方案 char* c;后c是一个未初始化的指针,其值不确定,后面cin>>c是从键盘读取内容到这个地址处,但是你怎么知道这个地址一定不会被别的什么代码使用呢?于是就错了.第二个是用new分配了专有地址空间的,写数据进去

在GridView中,我希望某个字段只显示10个字符,后面截取的字符串都以“...”表示,当跳到另一界面时,用“…”代替的信息都全部显示出来

问题描述 在GridView中,我希望某个字段只显示10个字符,后面截取的字符串都以"..."表示,当跳到另一界面时,用"-"代替的信息都全部显示出来,相当于查看它的详细信息.另一界面是显示他的详细信息的!跳到那个界面时,他的信息都全部显示出来.如何写代码呀.求大侠!前面的那个获取截取字段的已经实现了,并且已用"-"代替.就是跳到另一界面时,没有显示他的详细信息.还是"-"显示.现在我要的是:在一个gridiew控件中选中一个

PartitionKey或RowKey含有“%”字符时Windows Azure Tables出错解决方案

我们发现当PartitionKey或RowKey含有"%"字符时,应用Windows Azure Tables的服务将受到影响. 受此影响的API包括:Get entity, Merge entity, Update entity, Delete entity, Insert或Merge Entity,以及Insert或Replace Entity的API.如果任何上述API被调用时其PartitionKey或RowKey含有"%",用户则将收到404 Not Fo

PHP读取CURL模拟登录时生成Cookie文件的方法_php技巧

本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登录时会保存一个Cookie文件,例如下面的代码 复制代码 代码如下: $login_url = 'XXX';    $post_fields['email'] = 'XXXX';  $post_fields['password'] = 'XXXX';  $post_fields['origURL'] = 'XXX';  $post_fields['doma

二进制数据-java从数据库中读取二进制文件并....

问题描述 java从数据库中读取二进制文件并.... java从postgresql数据库中读取bytea二进制并且生成文件(如word,pdf文件等)!在jsp页面上显示附件(如邮件形式那样的附件)并且可以下载!请问怎么实现啊?求解!谢谢了! 解决方案 首先你需要确定附件的类型及名称.然后下载很简单的,根据下载的请求返回 response.addHeader ("content-type", "application/RFC822"); response.addH

zigbee cc2530在读取内置温度时,按键程序没反应,读取温度也只进行一次

问题描述 zigbee cc2530在读取内置温度时,按键程序没反应,读取温度也只进行一次 用的是2007协议栈,sampleapp例子,单片机用dadc的话会把按键中断关了还是怎么回事?

fread读取二进制文件长度的问题

问题描述 fread读取二进制文件长度的问题 int widthheigth;FILE *fpImg;fpImg = fopen( fullNamerb"");if( fpImg==0 ){ AfxMessageBox( ""Cannot open the image file"" MB_OK 0 ); return;} fread( &widthsizeof(int) 1 fpImg);fread( &height sizeof

c++-(MFC,socket)C++从http响应中读取到文件字符数组,但无法写入到文件中,显示为0kb

问题描述 (MFC,socket)C++从http响应中读取到文件字符数组,但无法写入到文件中,显示为0kb resp_leng= recv(sock, (char*)&buffer, BUFFERSIZE, 0); npos=string(buffer).find("rnrn",0); if(resp_leng>0 ) { if ( npos >= resp_leng-1 && flag) { response+= string(buffer).s