RDL.bin是从设备内把所有的记录打包生成的一个二进制文件,格式如下,每10个字节为一组数据。卡号3个字节
A1 D1 BE 06 07 19 10 34 10 AA
A1 D1 BE 06 07 19 10 34 14 AE
A1 D1 BE 06 07 19 10 34 19 B3例如:A1 D1 BE 由低到高。(转成16进制得到卡号)
06 07 19 10 34 10 年月日时分秒
AA 是前面9个字节的和效验。
请问我应该怎么解析这个二进制文件,把包内的记录通过都循环读出来?
A1 D1 BE 06 07 19 10 34 10 AA
A1 D1 BE 06 07 19 10 34 14 AE
A1 D1 BE 06 07 19 10 34 19 B3例如:A1 D1 BE 由低到高。(转成16进制得到卡号)
06 07 19 10 34 10 年月日时分秒
AA 是前面9个字节的和效验。
请问我应该怎么解析这个二进制文件,把包内的记录通过都循环读出来?
open "RDL.bin" for binary as #1
do while not eof(1)
get #1,,readByt
call xxxx(readByt) '你的分析函数
loop
close #1
fxy_2002(阿勇) 代码好象有点小问题~应该是open "RDL.bin" for binary access read as #1
open "c:\RDL.bin" for binary as #1如果是当前exe目录,则是:
open replace(app.path &"\RDL.bin","\\","\") for binary as #1
id = Val("&h" + Mid(str, 1, 2) + Mid(str, 3, 2) + Mid(str, 5, 2))
time = "20" + Mid(data1, 7, 2) + "-" + Mid(data1, 9, 2) + "-" + Mid(data1, 11, 2) + " " + Mid(data1, 13, 2) + ":" + Mid(data1, 15, 2) + ":" + Mid(data1, 17, 2)
请问我应该怎么处理?
最好麻烦把代码贴出来哦
你用STRING行吗?STRING对于一些控制符是会有问题的,尤其是00这样的值,必须出错。
就用阿勇的方法吧。
open "RDL.bin" for binary as #1
do while not eof(1)
get #1,,readByt
call xxxx(readByt) '你的分析函数
loop
close #1我的分析函数就是把每行的卡号和时间取出来,请问具体的代码应该怎么写?麻烦各位大哥了
这本身不就是16进制串码?还要转什么换?你用 byte() 数组读到后是字节,比如可能是 161,变成 16进制就用 hex() 处理一下后即是 A1 。至于时间,那你必须知道它是怎么写入的。是放的一个数值,还是放的一个日期格式的字符串?根据来源値的不同进行不同的还原处理。
Val("&H" + "FF")
这样能得到卡号?
?hex(readbyt(0))&hex(readbyt(1))hex(readbyt(2))两种的结果肯定不一样。
所以你必须知道数据来源格式,也就是怎么生成 .bin的,然后才能正确还原。
Dim l As Long
Dim readByt(9) As Byte
Open "RDL.bin" For Binary As #1
Do While Not EOF(1)
Get #1, , readByt
i = Val("&H" & (readByt(0)))
j = Val("&H" & (readByt(1)))
k = Val("&H" & (readByt(2)))
l = i + j * 256 + k * 65536
MsgBox l
Loop
Close #1
请问这样可不可以行到卡号?Get #1, , readByt这句话是什么意思?还有循环的条件not eof(1)是什么意思?VB没用过,所以菜鸟一个,还请各位大哥别骂我太笨哦
可能之前提的问题错了,应该是生成的文件里面的数据是十六进制的,卡号由低到高
end of file的简写Get #1, , readByt是以二进制方式读取数据并把每个字节写入readbyt这个数组里
一个字节是八位吧
你自己试下就知道了
不要事事都问
Dim str, time As String
Open "RDL.bin" For Binary As #1
Do While Not EOF(1)
Get #1, , readByt
i = Val("&H" & Hex((readByt(0))))
j = Val("&H" & Hex((readByt(1))))
k = Val("&H" & Hex((readByt(2))))
l = i + j * 256 + k * 65536
time = "20" + Hex((readByt(3))) + "-" + Hex((readByt(4))) + "-" + Hex((readByt(5))) + " " + Hex((readByt(6))) + _
":" + Hex((readByt(7))) + ":" + Hex((readByt(8)))
Debug.Print l
Debug.Print time
Loop
Close #1
得到的时间是这样的:206-7-17 15:23:52,是不是在按字节存放到数组的时候,前面的0就没有保留?请问大哥应该怎么处理?
?format("2006-7-17 15:23:52","YYYY-MM-DD HH:NN:SS")
2006-07-17 15:23:52
所以会这样
你一个一个字节试就知道了
你自己添加吧