||
(1)DHSVM模型官方网站上提供了一个二进制文件与ASCII文件的转换代码,是用C写的,昨天我仔细看了一下的这个代码,对二进制文件读写有了更深的认识。这个代码是对矩阵数据做处理,因此需要提供行列号。同时,我发现这个代码还可以转换数据格式,比如float to int等等。
这个代码的是写了main函数完整代码,main函数的参数包括:from format, to format, infile, outfile, nrows 和 nclos。在CodeBlocks中,运行代码配置这些参数如下:
需要说明的是,如果是from format 和 to format如果均不包含asii格式,那么这个代码执行的是数据格式转换,而且输入输出都是二进制文件。在进行转换时,需要注意的是,如果from format 和 to format包含char格式时,一定要确保数据取值范围为(-128 - 127)之间,否则会出错。原因可参考:https://docs.mql4.com/cn/basis/types/integer/integertypes
对于多个需要转换的文件,可以写个批处理命令如下:
当然,也可以将这个带有main函数的文件转换为一个函数文件,这样在代码内部对其进行调用。
(2)Matlab对二进制文件与ASCII文件转换(矩阵数据),我昨天也写了一个转换的函数。如下:
函数的调用如下:
当然这个函数,写得也比较粗糙。其实后面我觉得用MATLAB完全没有必要写个函数来转换,直接调用matlab的fread()和fwrite()函数来读写即可。
这里强调一点,在matlab读二进制文件时,与C语言(一行读完,读下一行)不同,是按照先读完一列再读下一列的顺序。比如:一个不换行的文件里含有:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15,想要输入matlab时,令其这样排:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
则fread应该写成:A=fread(fid,[5,3]),得到:
1 6 11
2 7 12
3 8 13
4 9 14
5 10 15
然后再转置,就能得到正确结果了。
如果错误地写成A=fread(fid,[3,5]),则得到
1 4 7 10 13
2 5 8 11 14
3 6 9 12 15
显然即使转置也得不到正确结果。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-24 13:01
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社