明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3965|回复: 16

[经验] 用autolisp的保留函数生成一个随机数

  [复制链接]
发表于 2020-11-25 14:15:11 | 显示全部楼层 |阅读模式
大家都知道,autolisp中没有生成随机数的函数。
其实它还是有这样的函数的,函数名字叫random& 。
只不过这函数是保留函数,没有公开,只能autodesk自己用,autolisp没法直接使用。
(defun rnd(n)
(random& n)
)
这样的代码是没法加载的。把它编译成fas后修改一下,它就可以运行了。神奇吗?
我把这个rnd.fas转成了lisp文件。
加载这个lisp文件就可以生成一个d:\rnd.fas,并加载它。
使用方法是(rnd n)
参数n是一个整数,它限制生成的随机数大小。
rnd.fas也可以通过qq5520971向作者索取。
程序源码如下:
(vl-load-com)
(DEFUN MAI_LISTTOSTREAM (OUT_FILE INTLIST / ADODB)
(setq INTLIST  
   (vlax-make-variant
     (vlax-safearray-fill
       (vlax-make-safearray 17 (CONS 0 (1- (LENGTH INTLIST))))
       INTLIST ) 8209 ))
(setq ADODB (vlax-get-or-create-object "adodb.stream"))
(vlax-put-property ADODB 'TYPE 1)
(vlax-invoke ADODB 'OPEN)
(vlax-put ADODB 'POSITION 0)
(vlax-invoke-method ADODB 'WRITE INTLIST)
(vlax-invoke ADODB 'SAVETOFILE OUT_FILE 2)
(AND ADODB (vlax-invoke ADODB 'CLOSE))
(AND ADODB (vlax-release-object ADODB))
(PRINC))
(MAI_LISTTOSTREAM   "d:/rnd.fas" (append  '( 070 065 083 052 045 070 073 076 069 032 059 013 010 050 054 013 010 051 032 036 148 001 001 001 000 137 002 000 220 000 000 152 003 000 003 002 000 181 001 001 000 003 153 001 000 150 036 013 010 057 057 032 052 032 036 020 001 001 001 000 050 000 050 024 042 057 001 000 091 082 078 068 000 000 001 001 067 000 000 003 000 010 050 000 050 026 042 057 001 000 086 082 065 078 068 079 077 038 000 078 000 000 092 000 000 067 000 000 003 000 010 092 000 000 050 000 091 082 078 068 000 000 058 001 067 003 000 001 000 028 020 001 000 000 000 009 002 000 010 087 000 000 000 000 009 003 000 006 001 000 009 001 000 022 024 000 146 008 100 163 021 031 149 165 010 059 102 097 115 052 032 099 114 117 110 099 104 010 059 036 059 065 049 049 047 050 053 047 050 048 )))
(load "d:/rnd.fas")
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-1-12 09:32:22 | 显示全部楼层
本帖最后由 ^蓝¤天^ 于 2021-1-12 09:45 编辑

win10X64,CAD2008和CAD2021,随机数很有规律:
命令: (rnd 4) 2
命令: (rnd 4) 3
命令: (rnd 4) 0
命令: (rnd 4) 1
命令: (rnd 4) 2
命令: (rnd 4) 3
命令: (rnd 4) 0
命令: (rnd 4) 1
命令: (rnd 4) 2
命令: (rnd 4) 3
命令: (rnd 4) 0
命令: (rnd 4) 1
命令: (rnd 4) 2
命令: (rnd 4) 3
命令: (rnd 4) 0
命令: (rnd 4) 1 2和4的时候会出现很有规律的随机数,其它的正常


 楼主| 发表于 2020-11-27 14:36:02 | 显示全部楼层
cghdy 发表于 2020-11-26 18:39
请问如何设计这个坑呢,能否举个例子

你可以把这个rnd.fas捆绑到你的程序中。
在你的程序中就用这个rnd.fas提供的函数rnd(n)产生随机数,有了随机数怎么灵活用就是你应该考虑的了。
发表于 2020-11-26 13:43:02 | 显示全部楼层
baitang36 发表于 2020-11-25 14:47
e派说这东西没啥用,我告诉他这是给反编译挖坑用的,翻出来源码也用不了。

但是反出了源码,一下就能找到这个坑啊
发表于 2020-11-25 14:23:37 | 显示全部楼层
奇怪的知识增加了
 楼主| 发表于 2020-11-25 14:47:18 | 显示全部楼层
菜卷鱼 发表于 2020-11-25 14:23
奇怪的知识增加了

e派说这东西没啥用,我告诉他这是给反编译挖坑用的,翻出来源码也用不了。
发表于 2020-11-25 22:56:30 来自手机 | 显示全部楼层
埋这么深也可也挖出来,需要功夫。
发表于 2020-11-26 11:21:46 | 显示全部楼层
反编译太恶心了
、、
所以放弃lisp了
发表于 2020-11-26 13:28:14 | 显示全部楼层
看到楼主发到theswamp了,代码对我来说不好懂呢
发表于 2020-11-26 14:48:43 | 显示全部楼层
baitang36 发表于 2020-11-25 14:47
e派说这东西没啥用,我告诉他这是给反编译挖坑用的,翻出来源码也用不了。

他不需要的一般都是没用的
 楼主| 发表于 2020-11-26 15:57:42 | 显示全部楼层
cghdy 发表于 2020-11-26 13:43
但是反出了源码,一下就能找到这个坑啊

找到只是第一步,还要想法填坑
发表于 2020-11-26 15:59:53 | 显示全部楼层
不得了的知识获得了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 01:41 , Processed in 0.180691 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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