标题:如何读取二进制文件的内容,并转换?
只看楼主
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:0 
回复 8楼 sh600839
最好上传一下你的文件

也好具体分析么

印象中我还没哟见过二进制文件

楼主也让我多见识一下

个性太多,无法显示
2012-05-12 14:03
sh600839
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2005-8-30
得分:0 
以下是引用TonyDeng在2012-5-12 13:57:45的发言:

在电脑中,字符'A'储存的二进制就是01000001,也可用十六进制0x41表示,这三种表示形式是完全一样的,都是同一个东西。因此你读入的a4字符chr(0xbf)其实已经是用0xbf储存的了,再asc(a4)是不需要做什么的。
斑竹我还是不太懂啊,就下面的到底如何写代码?我要从BF 03 33 01 得到20120511 。

例如:数据文件的16进制内容为:
        BF 03 33 01 ......
日期为:01 33 03 BF,16进制 0x013303BF =20120511  

*************
用&宏替换?
sh600004.rar (434 Bytes)


[ 本帖最后由 sh600839 于 2012-5-12 14:06 编辑 ]
2012-05-12 14:04
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:0 
以下是引用sh600839在2012-5-12 13:57:02的发言:

ctobin(lcBinary,'4rs') 参数不对
ctobin(lcBinary) 不是我要的结果

数据文件里的数据顺序要倒过来的, 要4321字节排序才能是正确结果。

每次都要输入验证码,呜呜呜呜

 
4321 ctobin第二个参数的r已经说明了要将顺序翻转,s说明符号不处理,4说明4个字节
根据你上传的文件,读取前4个字符,转换后就是你要的日期
my = Fopen("sh600004.day")
lcBinary =Fread(my,4)
? Ctobin(lcBinary,'4rs')

个性太多,无法显示
2012-05-12 14:13
sh600839
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2005-8-30
得分:0 
以下是引用taohua300在2012-5-12 14:03:22的发言:

最好上传一下你的文件

也好具体分析么

印象中我还没哟见过二进制文件

楼主也让我多见识一下
附件在二楼上传了,这个文件共32字节是1天的行情数据。
我要一个将它转换成txt文件的代码。
2012-05-12 14:14
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:0 
不能用宏替换了吧?你这是二进制文件,并不是明文字符,怎么能使用宏替换呢 ?

个性太多,无法显示
2012-05-12 14:14
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
回复 12楼 sh600839
你1楼的代码已经足够了

授人以渔,不授人以鱼。
2012-05-12 14:17
sh600839
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2005-8-30
得分:0 
以下是引用taohua300在2012-5-12 14:13:54的发言:

4321 ctobin第二个参数的r已经说明了要将顺序翻转,s说明符号不处理,4说明4个字节
根据你上传的文件,读取前4个字符,转换后就是你要的日期
my = Fopen("sh600004.day")
lcBinary =Fread(my,4)
? Ctobin(lcBinary,'4rs')
? Ctobin(lcBinary,'4rs')

我的系统是vfp5.0,运行后显示参数太多,帮助文件也没有参数说明,是不是升级版本改进了函数?
2012-05-12 14:18
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:0 
以下是引用sh600839在2012-5-12 14:14:11的发言:

附件在二楼上传了,这个文件共32字节是1天的行情数据。
我要一个将它转换成txt文件的代码。
共 32 个字节,每4个字节表示一个字段么 ?
我按每4个字节一次读取
结果如下
20120511
728
733
726
729
1259584443
1326338
0
估计后面3个字段读取有问题

个性太多,无法显示
2012-05-12 14:20
taohua300
Rank: 12Rank: 12Rank: 12
来 自:光
等 级:贵宾
威 望:14
帖 子:1636
专家分:3906
注 册:2009-3-11
得分:0 
以下是引用sh600839在2012-5-12 14:18:07的发言:

? Ctobin(lcBinary,'4rs')

我的系统是vfp5.0,运行后显示参数太多,帮助文件也没有参数说明,是不是升级版本改进了函数?
如果是vfp 5.0 的话,你只能用你一楼的代码了
5.0 不支持ctobin和bintoc

个性太多,无法显示
2012-05-12 14:21
sh600839
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2005-8-30
得分:0 
以下是引用TonyDeng在2012-5-12 14:17:51的发言:

你1楼的代码已经足够了
1楼代码的确可以,但是我感觉太笨了。这是股票行情数据,应该读取很快的。

my = Fopen("sh600004.day")
lcBinary =Fread(my,4)
?lcBinary
? Ctobin(lcBinary,'4rs')   &&这个感觉不错,但是我的vfp5.0不能用。

2012-05-12 14:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-367387-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.049444 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved