很简单,但是我似乎找不到答案。我有一个1和0的字符串,例如"01001010"
-如何将其解析为数字?
使用string-to-number
,可以选择接受基础:
(string-to-number "01001010" 2) ;; 74
如@sds在注释中所解释,string-to-number
如果转换失败,则返回0。这是不幸的,因为返回值0也可能意味着解析成功。我宁愿使用此功能的Common Lisp版本cl-parse-integer
。Hyperspec中描述了标准函数,而Emacs Lisp中的标准函数略有不同(特别是,没有辅助返回值):
(cl-parse-integer STRING &key START END RADIX JUNK-ALLOWED)
从START到END解析STRING子字符串中的整数。STRING 可能由空白字符(语法为的字符)包围。其他非数字字符被视为垃圾。RADIX是2到36之间的整数,默认值为10。如果START 和END之间的子字符串不能解析为整数,除非JUNK-ALLOWED不为null,则发出错误信号。
‘ ’
(cl-parse-integer "001010" :radix 2) => 10 (cl-parse-integer "0" :radix 2) => 0 ;; exception on parse error (cl-parse-integer "no" :radix 2) => Debugger: (error "Not an integer string: ‘no’") ;; no exception, but nil in case of errors (cl-parse-integer "no" :radix 2 :junk-allowed t) => nil ;; no exception, parse as much as possible (cl-parse-integer "010no" :radix 2 :junk-allowed t) => 2