RDL.bin是从设备内把所有的记录打包生成的一个二进制文件,格式如下,每10个字节为一组数据。卡号4个字节,后六位为日期时间
01 00 00 07 01 25 14 28 53 BD 
01 00 00 07 01 25 15 09 52 9E 
01 00 00 07 01 25 15 10 23 76 
01 00 00 07 01 25 15 33 15 8B 
例如:01 00 00 07   由低到高。(转成10进制得到卡号)
      01 25 15 09 52 9E 年月日时分秒     
请问我应该怎么解析这个十六进制文件,把包内的记录通过都循环读出来?

解决方案 »

  1.   

    两位朋友提的建议我试过了,可是没有得到我要的答案,单单读字符流并解决不了我的问题啊。我有PB的分解样例,可是在C#我不知应该如何实现,哪位朋友帮我看看?
    li_i = 1do while li_i < ll_record_leng 
    lb_record = blobmid(tot_b,li_i,10)

    li_temp=integer(string(asc(char(blobmid(lb_record,1,1)))))
    if li_temp<0 then li_temp = 256 + li_temp
    ls_id1 = li_temp

       li_temp=integer(string(asc(char(blobmid(lb_record,2,1)))))
    if li_temp<0 then li_temp = 256 + li_temp
    ls_id2 = li_temp*256

       li_temp=integer(string(asc(char(blobmid(lb_record,3,1)))))
    if li_temp<0 then li_temp = 256 + li_temp
    ls_id3 = li_temp*65536

    ll_empbh = ls_id3 + ls_id2 + ls_id1

    ls_date1=string(2000+int(asc(char(blobmid(lb_record,4,1)))/16) + mod(asc(char(blobmid(lb_record,4,1))),16))
       ls_date2=string(int(asc(char(blobmid(lb_record,5,1)))/16)) + string(mod(asc(char(blobmid(lb_record,5,1))),16))
       ls_date3=string(int(asc(char(blobmid(lb_record,6,1)))/16)) + string(mod(asc(char(blobmid(lb_record,6,1))),16))
       ld_date = date(ls_date1+"-"+ls_date2+"-"+ls_date3)  
    ls_time1=string(int(asc(char(blobmid(lb_record,7,1)))/16)) + string(mod(asc(char(blobmid(lb_record,7,1))),16))
       ls_time2=string(int(asc(char(blobmid(lb_record,8,1)))/16)) + string(mod(asc(char(blobmid(lb_record,8,1))),16))
       ls_time3=string(int(asc(char(blobmid(lb_record,9,1)))/16)) + string(mod(asc(char(blobmid(lb_record,9,1))),16))
    lt_time = time(ls_time1 +":"+ ls_time2 +":"+ ls_time3)

    ll_newrow = dw_yskq.insertrow(0)
    dw_yskq.setitem(ll_newrow,"bh",ll_empbh)
    dw_yskq.setitem(ll_newrow,"xm","")
    dw_yskq.setitem(ll_newrow,"rq",ld_date)
    dw_yskq.setitem(ll_newrow,"sj",lt_time)
       dw_yskq.setitem(ll_newrow,"dh",ls_dh)   li_i = li_i + 10
    loop
      

  2.   

    简单
    //文件操作之读取ini文件,返回Arraylist,每个元素为1行
            public static ArrayList ReadIniFile()
            {
                //从文件config.ini中读取数据
                FileStream fs = new FileStream(filePath,FileMode.OpenOrCreate,FileAccess.Read);
                StreamReader myrd = new StreamReader(fs, Encoding.Default);
                ArrayList tempstr = new ArrayList();
                while (myrd.Peek() >= 0)
                {
                    tempstr.Add(myrd.ReadLine());
                }
                myrd.Close();
                return tempstr;
            }
      

  3.   

    tuyile006(小y) 朋友,你这样取出来之后要如何读出来呢?
    我以前试过一种办法读出的是个r,用你的方法好像也是,可以请教下应该如何正确读取吗?