VB读取二进制文件,请各位大虾帮帮忙!!!

zj420482596 2006-07-19 11:52:33
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个字节的和效验。
请问我应该怎么解析这个二进制文件,把包内的记录通过都循环读出来?
...全文
1343 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
fxy_2002 2006-07-21
  • 打赏
  • 举报
回复
vb 有个内置的 kill 命令,用来删除文件的。
zj420482596 2006-07-21
  • 打赏
  • 举报
回复
知道了,麻烦各位大哥了
zj420482596 2006-07-21
  • 打赏
  • 举报
回复
再请问一下,读完后,如何删除这个文件?
一笑拔剑 2006-07-21
  • 打赏
  • 举报
回复
byte3是空字节
所以会这样
你一个一个字节试就知道了
你自己添加吧
fxy_2002 2006-07-21
  • 打赏
  • 举报
回复
是 2006 吧?

2006-7-17 15:23:52 已是正确的时间了,显示格式与你的操作系统设置有关。

要它显示完整格式,可以:
?format("2006-7-17 15:23:52","YYYY-MM-DD HH:NN:SS")
2006-07-17 15:23:52
zj420482596 2006-07-21
  • 打赏
  • 举报
回复
Dim readByt(9) As Byte
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就没有保留?请问大哥应该怎么处理?
一笑拔剑 2006-07-20
  • 打赏
  • 举报
回复
对的
就是这样

你最终还是要转成10进制的

16进制的你能看明白吗
fxy_2002 2006-07-20
  • 打赏
  • 举报
回复
如果你确定只要转成16进制即是卡号,应该:

?val("&H"&hex(readbyt(0))&hex(readbyt(1))hex(readbyt(2)))

但还有可能是分别转成16进制,然后连接:
?hex(readbyt(0))&hex(readbyt(1))hex(readbyt(2))

两种的结果肯定不一样。
所以你必须知道数据来源格式,也就是怎么生成 .bin的,然后才能正确还原。
zj420482596 2006-07-20
  • 打赏
  • 举报
回复
Val("&H" + "readByt(0)"+"readByt(1)"+"readByt(2)")
这样能得到卡号?
一笑拔剑 2006-07-20
  • 打赏
  • 举报
回复
readByt(0)是值是16进制的
一个字节是八位吧
你自己试下就知道了
不要事事都问
zj420482596 2006-07-20
  • 打赏
  • 举报
回复
那请问要读的数据是16进制的,读出来后还会是原来的那个么?A1 D1 BE 取出来的字节数组中readByt(0)会等于A1,readByt(1)会等于D1么?
一笑拔剑 2006-07-20
  • 打赏
  • 举报
回复
not eof(1)是一直读取到文件结束
end of file的简写

Get #1, , readByt是以二进制方式读取数据并把每个字节写入readbyt这个数组里
zj420482596 2006-07-20
  • 打赏
  • 举报
回复
Dim i, j, k As Integer
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没用过,所以菜鸟一个,还请各位大哥别骂我太笨哦
可能之前提的问题错了,应该是生成的文件里面的数据是十六进制的,卡号由低到高
一笑拔剑 2006-07-19
  • 打赏
  • 举报
回复
基本上是这样的了
fxy_2002 2006-07-19
  • 打赏
  • 举报
回复
循环读取,每次读10个字节,然后丢给一个分析函数去处理这10个字节,按你的规则分解

dim readByt(9) as byte
open "RDL.bin" for binary as #1
do while not eof(1)
get #1,,readByt
call xxxx(readByt) '你的分析函数
loop
close #1
一笑拔剑 2006-07-19
  • 打赏
  • 举报
回复
你问的是16进制怎么转换10进制数字吧
Val("&H" + "FF")
fxy_2002 2006-07-19
  • 打赏
  • 举报
回复
A1 D1 BE 06 07 19 10 34 10 AA
这本身不就是16进制串码?还要转什么换?

你用 byte() 数组读到后是字节,比如可能是 161,变成 16进制就用 hex() 处理一下后即是 A1 。

至于时间,那你必须知道它是怎么写入的。是放的一个数值,还是放的一个日期格式的字符串?根据来源値的不同进行不同的还原处理。
zj420482596 2006-07-19
  • 打赏
  • 举报
回复
dim readByt(9) as byte
open "RDL.bin" for binary as #1
do while not eof(1)
get #1,,readByt
call xxxx(readByt) '你的分析函数
loop
close #1

我的分析函数就是把每行的卡号和时间取出来,请问具体的代码应该怎么写?麻烦各位大哥了
okcome 2006-07-19
  • 打赏
  • 举报
回复
阿勇的方法没错。
你用STRING行吗?STRING对于一些控制符是会有问题的,尤其是00这样的值,必须出错。
就用阿勇的方法吧。
zj420482596 2006-07-19
  • 打赏
  • 举报
回复
可不可以不用数组啊,string行么?例如取得一行,这样得到卡号
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)
请问我应该怎么处理?
最好麻烦把代码贴出来哦
加载更多回复(4)
内容概要:本文系统研究了基于粒子群算法(PSO)的微网优化调度方法,并重点引入需求响应机制以提升微电网运行的经济性与可靠性。研究构建了一个综合考虑风能、光伏、储能、柴油发电机、燃气轮机等多种分布式能源的微电网模型,建立了以最小化系统综合运行成本为目标,涵盖燃料成本、环境污染惩罚、购售电费用及需求响应激励成本的多目标优化模型。文中详细阐述了粒子群算法的数学原理及其在求解此类非线性、多维度、带约束的复杂优化问题中的独特优势,通过Matlab编程实现了完整的算法流程与仿真分析,验证了所提方法在有效降低系统运行成本、平抑负荷波动、提高可再生能源消纳率以及增强微网应对需求侧变化灵活性方面的显著效果。; 适合人群:具备一定电力系统、优化理论基础和Matlab编程能力的高校研究生、从事新能源、智能电网及相关领域研究的科研人员,以及致力于微电网规划与运行优化的工程技术人员。; 使用场景及目标:①用于教学与科研,深入理解微网优化调度的核心挑战、数学建模方法及智能优化算法的应用;②为实际微电网项目的规划设计、运行策略制定提供可靠的算法工具和技术参考;③作为智能优化算法(如PSO)在综合能源系统中成功应用的典型案例,推动先进算法在能源互联网领域的研究与实践。; 阅读建议:建议读者在学习过程中,务必结合文中的Matlab代码进行上机实践,重点关注目标函数的设计逻辑、各类物理约束(如功率平衡、设备出力、储能容量等)的数学表达,以及PSO算法中关键参数(如种群规模、惯性权重、学习因子)的设置与调优技巧,可通过改变参数或扩展模型(如加入更多能源形式或转化为多目标优化)来加深理解和掌握。
2026年,法学硕士工程师的实际收入是多少?每天使用人工智能工具会给你带来更多回报还是让你付出代价?5000个人工智能和数据科学角色,解码。 经典的数据科学薪酬数据集在人工智能工具时代之前就停止了。这是为它而建的:27列,涵盖职位、经验水平、就业类型、公司规模、公司所在地、员工居住地、远程比率、行业、教育、主要语言、经验年限、美元工资、股权和奖金、每周工作时间、每日人工智能工具使用和工作时间、证书、面试机会、工作转换、技能提升时间以及自我报告的自动化恐惧分数。5000行,零缺失值——工资真正受到资历、市场、公司规模、行业和远程设置的影响,因此回归模型实际上学到了一些东西。 让你开始的想法: -构建一个薪酬回归模型——哪个特征的权重最大? -远程比率是伴随着薪酬溢价还是减薪? -LLM/AI头衔是否比经典的数据科学家职位更受欢迎,以及赚多少钱? -按国家绘制薪酬图——一旦你控制了资历,市场差距有多大? -谁最害怕自动化?将分析师与ML工程师进行比较。 -在你控制多年的经验后,是否有博士学位溢价? -日常使用人工智能工具是否与满意度、工作时间或薪酬相关?

7,788

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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