本帖最后由 baitang36 于 2024-6-18 20:44 编辑

纯算法实现base64编码解码 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)

纯lisp实现更高效的base64编码解码 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
看了以上两个帖子,觉得已经非常不错了。
但觉得还有点慢,怎么办?上汇编,只有汇编语言写的东西才可以用最。最快的代码一定是汇编,别的语言最终执行的机器码也相当于汇编。
汇编语言的试验代码很简单

.data
    pbBinary db  256 dup (0)    ; buffer for output
    newstr1 db  256 dup (0)   
    pszString db "1234567890123456789012",0
              db 100 dup(0)
     cchString    dd 22
     dwFlags      dd 1
     pcbBinary    dd 36
     pdwSkip      dd 0
     pdwFlags     dd 0
     pcbBinary1   dd 22
.code
start:
   invoke CryptStringToBinaryA,addr pszString, 22,1, 0,addr pcbBinary,0,0
   invoke CryptStringToBinaryA,addr pszString, 22,1, addr pbBinary,addr pcbBinary,0,0  ;解密成功,输出二进制字符串
   invoke CryptBinaryToStringA,  addr pbBinary,16,  1,addr newstr1, addr pcbBinary1   ;加密                     
   invoke ExitProcess,eax
end start


试验成功后再把它改成autolisp
程序中定义了三个函数:
syz-base64-encode-a (str ) 加密字符串
syz-base64-decode-a (str ) 解密字符串
syz-base64-decode-aL (str) 解密字符串,输出一个表。为了方便使用二进制数据。
由于使用了保留函数调用CryptStringToBinaryA,仅支持acad,32位64位都可以,高版本lispsys=0才能用。
只能使用ansi编码,不支持Unicode
用法:
命令: (syz-base64-encode-a "12345上山打老虎")
"MTIzNDXJz8m9tPLAz7ui"
命令: (syz-base64-decode-a "MTIzNDXJz8m9tPLAz7ui")
"12345上山打老虎"
命令: (syz-base64-decode-al "MTIzNDXJz8m9tPLAz7ui")
(49 50 51 52 53 201 207 201 189 180 242 192 207 187 162)







网友答:
kozmosovia 发表于 2024-6-18 18:45
好像在lispsys=1的情况下,不能用。

不支持utf-8字符串,只支持ansi编码,必须lispsys=0

网友答:
baitang36 发表于 2024-6-21 06:08
没币的朋友在这里下载

这个能否实现文件和字符串互转呢

网友答: dwx爱好者可以参照汇编码实现同样功能

网友答: 这个也是用隐藏函数的吗?

网友答: 这也太强了。

网友答: 先点赞后观看

网友答: 6啊

网友答: 太棒了,点赞~
下载来存着!!

网友答: 先顶后看,火速下载

网友答:
太棒了,点赞~

网友答: 速度确实非常快,比系统的还快
  • 上一篇:分享源码 查找布局视口在模型的位置并显示
  • 下一篇:没有了