关于chr和ascii函数
各位,碰到一个很奇怪的问题,比如用:(chr 17985) -->"A"返回的是“A”
(chr 65)------>"A" 返回的也是"A"
而用
(ASCII "A")--->65 ;返回的是65而不是17985
======================================
我在cad2004中,用其他函数读取“ABC”,返回的是(65 66 67)
在cad2008中,用同样的函数读取“ABC”,返回的是(17985 17986 17987)
我的问题是,如何在2008下,也同样返回 (65 66 67)
自定义函数如下:
(defun rw(file l_dat / stream rtn)
(setq stream (vlax-get-or-create-object "ADODB.Stream"))
(vlax-put-property stream 'Type 1)
(vlax-invoke stream 'Open)
(if l_dat
(progn
(setq l_dat (vlax-safearray-fill (vlax-make-safearray 17 (cons 0 (1- (length l_dat)))) l_dat))
(vlax-put-property stream 'Position 0)
(vlax-invoke-method stream 'Write l_dat)
(vlax-invoke-method stream 'SaveToFile file 2)
)
(progn
(vlax-invoke-method stream 'LoadFromFile file)
(vlax-put-property stream 'Position 0)
(setq rtn (vlax-safearray->list (vlax-variant-value (vlax-invoke-method stream 'Read (vlax-get stream 'Size)))))
)
)
(vlax-release-object stream)
rtn
)
==========================================================================
(rem n 256) nzl1116 发表于 2013-11-20 00:58 static/image/common/back.gif
(rem n 256)
感谢回复,那如何将以下列表一次性通过rem的方式,转换后,组成新的表,谢谢!
(17933 17930 18004 17987 18000 17993 18000 17978 17952 17952 17952 17952 17952
17952 17952 17952 17969 17977 17970 17966 17969 17974 17976 17966 17969 17966
17969 17968 17973 17933)
(mapcar '(lambda (x) (rem x 256)) '(17933 17930 18004 17987 18000 17993 18000 17978 17952 17952 17952 17952 17952
17952 17952 17952 17969 17977 17970 17966 17969 17974 17976 17966 17969 17966
17969 17968 17973 17933)) 819534890 发表于 2013-11-20 01:36 static/image/common/back.gif
(mapcar '(lambda (x) (rem x 256)) '(17933 17930 18004 17987 18000 17993 18000 17978 17952 17952 1795 ...
是的,通过2楼和3都得方法,得到了我要的值,在2008中,也运行完美,问题是,用源码运行的时候都没问题,但是弄成VLX后,得出的值又不对了。
看来还是要从源头解决问题。。。。不知是否还有什么高招! 哈哈,我还把链给发到你的那个二进制读取的bbs里了呢,原来就是你自己发的呀 NJZX05 发表于 2013-11-20 10:24 static/image/common/back.gif
哈哈,我还把链给发到你的那个二进制读取的bbs里了呢,原来就是你自己发的呀
???没看明白 我思考了一下,这个问题应该是因为2004与2008在数据位上进行了扩展,而没有能够及时地定义数的数据类型,从而导致了位扩展的结果,由于二进制与ASSIC码的表示范围都是不需要扩展位的,因此,可以通过这种去除扩展位的方法,予以统一解决。经测试,对这类问题仅二进制的后8位是有效的 NJZX05 发表于 2013-11-20 10:51 static/image/common/back.gif
我思考了一下,这个问题应该是因为2004与2008在数据位上进行了扩展,而没有能够及时地定义数的数据类型,从 ...
二进制的后8位不就是二楼(REM N 256)的结果么,绕半天还提给绕回去 期待有完美解决的办法,高手支招,谢谢
页:
[1]
2