明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: cabinsummer

[源码] [风之影]文本BASE64编码解码

[复制链接]
发表于 2018-8-31 09:41:26 | 显示全部楼层
大神,牛牛牛牛!!!
发表于 2020-1-8 00:12:32 | 显示全部楼层
  1. (defun $str->base64$
  2.     (str / code *SCR DATA)
  3.           ;大于20kb后速度很慢
  4.   (if (and STR (= (type str) 'str))
  5.     (if  (or
  6.     *SCR
  7.     (setq
  8.       *SCR (vlax-create-object
  9.        "Aec32BitAppServer.AecScriptControl.1"
  10.      )
  11.     )
  12.     (setq *SCR (vlax-create-object "ScriptControl"))
  13.   )
  14.       (progn
  15.   (vlax-put *SCR 'language "VBScript")
  16.   (setq code
  17.          "Base64Encode(str)
  18.   Function Base64Encode(byVal s)
  19.   b=\"\"
  20.   h=\"\"
  21.   bs=\"\"
  22.   n=0  
  23.   For i=1 to len(s)
  24.   h=h & StrToHex(Mid(s, i, 1))  
  25.   Next
  26.   For i=1 to len(h) Step 2  
  27.   b=b & HexToBin(Mid(h,i,2))
  28.   Next
  29.   For i=1 to len(b) Step 6
  30.   n=n+1
  31.   t=(Mid(b,i,6))
  32.   If len(t) <> 6 Then  
  33.   t=Left(t & \"000000\", 6)
  34.   End If
  35.   bs=bs & BinToChr(BinToDec(t))
  36.   Next
  37.   m=n Mod 4
  38.   If m =2 Then  
  39.   bs=bs & \"==\"
  40.   End If
  41.   If m =3 Then
  42.   bs=bs & \"=\"  
  43.   End If
  44.   Base64Encode=bs  
  45.   End Function
  46.   Function StrToHex(byVal s)  
  47.   h=\"\"
  48.   c=\"&H\" & Hex(AscW(s))  
  49.   If c >= &H0001 And c <= &H007F Then  
  50.   h=h & Hex(c)
  51.   ElseIf c > &H07FF Then  
  52.   h=h & Hex(&HE0 Or (c\\(2^12) And &H0F))
  53.   h=h & Hex(&H80 Or (c\\(2^6) And &H3F))
  54.   h=h & Hex(&H80 Or (c\\(2^0) And &H3F))
  55.   Else
  56.   h=h & Hex(&HC0 Or (c\\(2^6) And &H1F))
  57.   h=h & Hex(&H80 Or (c\\(2^0) And &H3F))
  58.   End If
  59.   StrToHex=h
  60.   End Function
  61.   Function HexToBin(byVal s)
  62.   b=\"\"
  63.   dec=Clng(\"&H\" & s)
  64.   Do While dec > 0
  65.   b=dec Mod 2 & b
  66.   dec=dec \\ 2
  67.   Loop
  68.   b=Right(\"00000000\" & CStr(b), 8)
  69.   HexToBin=b
  70.   End Function
  71.   Function BinToDec(byVal s)
  72.   d=0
  73.   For i=6 to 1 Step -1
  74.   d=d + CInt(Mid(s, i, 1)) * 2 ^ (6 - i)
  75.   Next
  76.   BinToDec=d
  77.   End Function
  78.   Function BinToChr(byVal s)
  79.   dic=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"
  80.   BinToChr=Mid(dic, s+1, 1)
  81.   End Function"
  82.   )
  83.   (if (and
  84.         (not (vl-catch-all-error-p
  85.          (vl-catch-all-apply
  86.            'vlax-invoke
  87.            (list *SCR
  88.            'addcode
  89.            code
  90.            )
  91.          )
  92.        )
  93.         )
  94.         (not (vl-catch-all-error-p
  95.          (setq str (vl-catch-all-apply
  96.          'vlax-invoke
  97.          (list *SCR
  98.                'run
  99.                "Base64Encode"
  100.                str
  101.          )
  102.              )
  103.          )
  104.        )
  105.         )
  106.       )
  107.     ()
  108.     (setq str nil)
  109.   )
  110.   (if *SCR
  111.     (vlax-release-object *SCR)
  112.   )
  113.       )
  114.       (progn (print "调用VBScript转码失败,组件未找到"))
  115.     )
  116.   )
  117.   str
  118. )

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-1 14:01 , Processed in 0.140814 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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