关于二进制文件读取
时间:12-13
整理:3721RD
点击:
对象:文件来自于一个现成的数据库,这种格式并非labview可直接识别的,所谓"212 format".具体的说,是以12bit表达一个有符号整数(左边高位),三个byte装两个数中间的byte各占用一半
要求:用labview打开并正确读取它在图形控件中显示
已有的但不成熟的想法:
1.http://forums.ni.com/ni/board/message?board.id=170&message.id=37118&requireLogin=False
其中最后bill提的办法,但是他们讨论的那种显然是对于text files,而不是对于binary files而言的,而且他是作U8处理无符号,感觉参考意义不大(此想法由NI/china/support engineer转引给我)
2.就当它是U8每次读三个byte统统convert成boolean array,在作分割重整.
我感觉不理想,有点笨
征集,请教:
1.labview里有现成的相关的function可用
or 2.最好这里有那位遇到并解决过同样的问题
or 3.其它.试想A/D经常有10bit或12bit的但是ram都按是1byte(8bits)or word的访问为节省ram起见212 应是很多人都能想到的办法,做过相关数据采集(自己做AD和通信而不是用NI现成的card)的人应该也遇到过这种问题吧?通常怎么办的?
要求:用labview打开并正确读取它在图形控件中显示
已有的但不成熟的想法:
1.http://forums.ni.com/ni/board/message?board.id=170&message.id=37118&requireLogin=False
其中最后bill提的办法,但是他们讨论的那种显然是对于text files,而不是对于binary files而言的,而且他是作U8处理无符号,感觉参考意义不大(此想法由NI/china/support engineer转引给我)
2.就当它是U8每次读三个byte统统convert成boolean array,在作分割重整.
我感觉不理想,有点笨
征集,请教:
1.labview里有现成的相关的function可用
or 2.最好这里有那位遇到并解决过同样的问题
or 3.其它.试想A/D经常有10bit或12bit的但是ram都按是1byte(8bits)or word的访问为节省ram起见212 应是很多人都能想到的办法,做过相关数据采集(自己做AD和通信而不是用NI现成的card)的人应该也遇到过这种问题吧?通常怎么办的?
我用C读取过这种格式的东西(直接来自采集卡的数据流.文件同理).C里面有指针,所以另开个有符号整型数组.直接把数组指针强制类型转换成字节型.然后每次取三个data byte,拆开了赋给数组相应的位置就可以了.
不支持指针的语言就只能每次读出三个字节然后转换了. 转换过程位运算是最方便的.没有位运算的也可以转换成+-*/.慢不了多少,就是不直观.
用boolean数组是最不可取的了.如果我来做大概我会考虑用formula node.
谢谢femto的热情帮助,只是其实你的说法和bill的似乎是一样的,既然不止一个人这样想,应该是可行的.但对我这样的入门级选手可能实现起来要花些时间才好.尤其是你帮我指出了boolean不可取,可以防止我走弯路,只是不知其原因,是算法编程实现起来困难还是说labview进行相关运算效率低
无论如何谢谢femto,在这里,你是第一个也是目前唯一一个对我这个问题感兴趣的朋友
labview个人觉得这种G语言的编程方式在算法控制方面还是显得比较麻烦的,不过labview也提供了CIN和dll这两种方式来弥补