明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3538|回复: 11

[讨论] 关于chr和ascii函数

[复制链接]
发表于 2013-11-20 00:30:15 | 显示全部楼层 |阅读模式
各位,碰到一个很奇怪的问题,比如用:

(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
)


==========================================================================






本帖被以下淘专辑推荐:

发表于 2013-11-20 00:58:58 | 显示全部楼层
(rem n 256)

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
aicr317 + 1 + 50

查看全部评分

 楼主| 发表于 2013-11-20 01:20:28 | 显示全部楼层
nzl1116 发表于 2013-11-20 00:58
(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)

发表于 2013-11-20 01:36:55 | 显示全部楼层
(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))

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
aicr317 + 1 + 50

查看全部评分

 楼主| 发表于 2013-11-20 09:57:41 | 显示全部楼层
819534890 发表于 2013-11-20 01:36
(mapcar '(lambda (x) (rem x 256)) '(17933 17930 18004 17987 18000 17993 18000 17978 17952 17952 1795 ...

是的,通过2楼和3都得方法,得到了我要的值,在2008中,也运行完美,问题是,用源码运行的时候都没问题,但是弄成VLX后,得出的值又不对了。

看来还是要从源头解决问题。。。。不知是否还有什么高招!
发表于 2013-11-20 10:24:28 | 显示全部楼层
哈哈,我还把链给发到你的那个二进制读取的bbs里了呢,原来就是你自己发的呀
 楼主| 发表于 2013-11-20 10:27:41 | 显示全部楼层
NJZX05 发表于 2013-11-20 10:24
哈哈,我还把链给发到你的那个二进制读取的bbs里了呢,原来就是你自己发的呀

???没看明白
发表于 2013-11-20 10:51:32 | 显示全部楼层
我思考了一下,这个问题应该是因为2004与2008在数据位上进行了扩展,而没有能够及时地定义数的数据类型,从而导致了位扩展的结果,由于二进制与ASSIC码的表示范围都是不需要扩展位的,因此,可以通过这种去除扩展位的方法,予以统一解决。经测试,对这类问题仅二进制的后8位是有效的
发表于 2013-11-24 13:27:21 | 显示全部楼层
NJZX05 发表于 2013-11-20 10:51
我思考了一下,这个问题应该是因为2004与2008在数据位上进行了扩展,而没有能够及时地定义数的数据类型,从 ...

二进制的后8位不就是二楼(REM N 256)的结果么,绕半天还提给绕回去
 楼主| 发表于 2013-12-14 14:29:00 | 显示全部楼层
期待有完美解决的办法,高手支招,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-23 07:09 , Processed in 0.191133 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表