grandhougday 发表于 2022-7-6 08:46:40

我想我应该找到一些方法来提取正确的字符。
谢谢你的专业评论。

Lee Mac 发表于 2022-7-6 08:50:18

不客气

grandhougday 发表于 2022-7-6 08:53:10

我找到了(vl string elt)结果的含义。在命令提示符中,我得到了以下答案:
Command: (vl-string-elt "Þ" 0)
92

Command: (vl-string-elt "Þ" 1)
85

Command: (vl-string-elt "Þ" 2)
43

Command: (vl-string-elt "Þ" 3)
48

Command: (vl-string-elt "Þ" 4)
48

Command: (vl-string-elt "Þ" 5)
68

Command: (vl-string-elt "Þ" 6)
69
这意味着:“+00DE”意味着“222”
有人知道为什么会这样吗?如何才能得到正确的答案?

Lee Mac 发表于 2022-7-6 08:56:47

如果您使用:
 
(vl-string->list "Þ")

grandhougday 发表于 2022-7-6 08:59:34

结果如下:
Command: (vl-string->list "Þ")
(92 85 43 48 48 68 69)

Lee Mac 发表于 2022-7-6 09:02:07

好的,因此,我猜测:
 
(vl-list->string (vl-string->list "Þ")
 
将返回:
 
"\U+00DE"
 
考虑到这一点,我们可以将十六进制部分(00DE)转换为十进制表示:
 
(defun _ascii ( ch )
   (_HexList->Decimal (reverse (cdddr (vl-string->list ch))))
)

(defun _HexList->Decimal ( lst )
   (if lst
       (+(* 16 (_HexList->Decimal (cdr lst)))
         (if (< (car lst) 65)
               (- (car lst) 48)
               (- (car lst) 55)
         )
       )
       0
   )
)
 
_$ (_ascii "Þ")
222

grandhougday 发表于 2022-7-6 09:05:30

我会尽快试试的。
谢谢。

Ahankhah 发表于 2022-7-6 09:07:55

李,
让我编辑您的优秀代码,以便用新函数替换内部“ascii”函数:
 

(defun _ascii (ch / ret)
(if (zerop (setq ret (_HexList->Decimal (reverse (cdddr (vl-string->list ch))))))
    (ascii ch)
    ret
)
)

(defun _HexList->Decimal (lst)
(if lst
    (+ (* 16 (_HexList->Decimal (cdr lst)))
      (if (< (car lst) 65)
      (- (car lst) 48)
      (- (car lst) 55)
      )
    )
    0
)
)

marko_ribar 发表于 2022-7-6 09:13:17

这是某种错误的结果-在我的电脑上是正确的:
 

Command: (vl-string->list "Þ")
(222)

 
M、 R。

Ahankhah 发表于 2022-7-6 09:15:04

 
但在我的电脑上:
 
in AutoCAD command line:

Command: (vl-string->list "Þ")
(92 85 43 48 48 68 69)
 
17
页: 1 [2]
查看完整版本: Ascii和(vl字符串elt)给出