aicr317 发表于 2009-12-28 15:17:00

读写二进制研究

本帖最后由 作者 于 2009-12-28 23:28:31 编辑 <br /><br /> <p>;Subject:binary conversion to text by lisp 二进制文件转文本<br/>;Writen:nonsmall(不死猫)<br/>;Date:2009 10 18<br/>;All Rights Reserved 版权所有 nonsmall(不死猫)<br/>;Contact: QQ:43797405 Email:nonsmall@163.com<br/>(defun binaryToText(FileName / ADODB.Stream)<br/>&nbsp;(Setq ADODB.Stream (Vlax-Get-Or-Create-Object "ADODB.Stream" ))<br/>&nbsp;(Vlax-Put-Property ADODB.Stream 'Type 1 )<br/>&nbsp;(Vlax-Invoke ADODB.Stream 'Open )<br/>&nbsp;(Vlax-Invoke-Method ADODB.Stream 'LoadFromFile FileName )<br/>&nbsp;(Vlax-Put-Property ADODB.Stream 'Position 0 )<br/>&nbsp;(Vlax-Invoke-Method ADODB.Stream 'Write (car (list (Vlax-Invoke-Method ADODB.Stream 'Read (Vlax-Get ADODB.Stream 'Size )) (Vlax-Put-Property ADODB.Stream 'Position 0 ))))<br/>&nbsp;(Vlax-Put-Property ADODB.Stream 'Position 0 )<br/>&nbsp;(Vlax-Put-Property ADODB.Stream 'Type 2 )&nbsp;<br/>&nbsp;(Vlax-Put-Property ADODB.Stream 'CharSet "us-ascii" )<br/>&nbsp;(Vlax-Invoke ADODB.Stream 'ReadText)<br/>&nbsp;;(vlax-release-object ADODB.Stream)<br/>)<br/></p><p>(defun _WriteStream ( path text mode / fso stream file result )</p><p>&nbsp;&nbsp;&nbsp; ;;&nbsp; Return the file size if the file is successfully written <br/>&nbsp;&nbsp;&nbsp; ;;&nbsp; to, otherwise nil. Will write all ascii chars to file<br/>&nbsp;&nbsp;&nbsp; ;;&nbsp; including nulls. If the caller wants to pass a list of<br/>&nbsp;&nbsp;&nbsp; ;;&nbsp; byte values to the function just call it like so:<br/>&nbsp;&nbsp;&nbsp; ;;<br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (_WriteStream <br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path <br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vl-list-&gt;string '(87 111 111 116 33)) <br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode<br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ) <br/>&nbsp;&nbsp;&nbsp; ;;<br/>&nbsp;&nbsp;&nbsp; ;;&nbsp; Arguments:<br/>&nbsp;&nbsp;&nbsp; ;;<br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path&nbsp; &lt;duh&gt;<br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text&nbsp; &lt;duh&gt;<br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode&nbsp; "a" to create/append, <br/>&nbsp;&nbsp;&nbsp; ;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "w" to create/overwrite (default)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; (setq mode (if (member mode '("a" "A")) "a" "w"))<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; (vl-catch-all-apply<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '(lambda ( / format )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq fso (vlax-create-object "Scripting.FileSystemObject"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&nbsp;&nbsp; (or (null (findfile path)) (eq "w" mode))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq stream<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-invoke <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fso<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'CreateTextFile <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1 ;; 0 (false) = don't overwrite , -1 (true) = overwrite<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 ;; 0 (false) = ascii, -1 (true) = unicode <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq file (vlax-invoke fso 'GetFile path))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&nbsp;&nbsp; (setq file (vlax-invoke fso 'GetFile path))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq stream<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-invoke <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'OpenAsTextStream <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8 ;; 1 = read, 2 = write, 8 = append<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 ;; 0 = ascii, -1 = unicode, -2 system default<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-invoke stream 'Write text)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-invoke stream 'Close)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq result (vlax-get file 'Size))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )</p><p>&nbsp;&nbsp;&nbsp; (if file (vlax-release-object file))<br/>&nbsp;&nbsp;&nbsp; (if stream (vlax-release-object stream))<br/>&nbsp;&nbsp;&nbsp; (if fso (vlax-release-object fso))<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; result<br/>&nbsp;&nbsp;&nbsp; <br/>)</p><p>&nbsp;</p><p>=========================================================</p><p>测试<font color="#ff0000">:(_writestream "d:\\jmj.sld" (vl-list-&gt;string (vl-string-&gt;list (binarytotext "d:\\bsph.sld"))) "w")</font></p><p></p><p>&nbsp;</p><p></p><p></p><p></p><p>&nbsp;</p><p><font color="#ff0000">生产的JMJ.SLD的值和原来的BSPH.SLD的值是一样的,文件大小也相等!</font></p><p></p><p>但是预览效果也不同,为什么</p><p><font color="#ff0000">bsph.SLD是这样的</font>&nbsp;</p><p></p><p><font color="#ff0000">而JMJ.SLD是这样的</font></p><p>&nbsp;</p>

xianaihua 发表于 2009-12-30 00:56:00

你所用的程序在实际使用时是有问题的,这有老外做的读写二进制文件工具,很好用;
加载后(注意07,08用ReadBin17.arx,05,06用ReadBin16.arx),用函数binget,binput即可。
以下为示例:
;读写幻灯片文件
(defun c:test2 ( / )
(setq a (binget "d:\\GB56.sld" ));读取二进制文件
(binput "d:\\GB56-1.sld" a );写二进制文件
)
(defun c:test3 ( / )
(binput "c:\\McCoy2.dwg" (binget "c:\\McCoy.dwg" ) )
)

carrot1983 发表于 2009-12-28 22:44:00

<p>应该还有一个“textToBinary”</p>

aicr317 发表于 2009-12-28 23:09:00

楼上能留下QQ吗?想进一步请教

carrot1983 发表于 2009-12-29 10:20:00

<p>我也是花了三天时间,硬是没有找到正确的解决方法。</p><p>问我也无解。</p>

jxphklibin 发表于 2010-7-6 11:42:00

非常好,多谢

zyhandw 发表于 2012-10-27 17:38:18

经试用,xianaihua 提供的方法的确好用!

xmzhangzhilin 发表于 2018-5-7 14:49:42

5楼的方法很好用,唯一的缺点就是.arx也没办法一直打包到vlx中,用在别的电脑上需先加载ReadBin17.arx

LIULISHENG 发表于 2021-10-4 22:38:03

学习一下怎么实现的
页: [1]
查看完整版本: 读写二进制研究