输出当数字:
在b uilt在format
功能做到这一点很好:
user> (format "%o" 19)
"23"
约一个数量当然不是什么
知道,如果它是在一个特定的格式原先规定,但如果你把它变成一个收集和存储与它一起的信息,无论是直接或者在元数据中,您可以跟踪这些信息。
至于阅读的数字而言:
Clojure的数字是八进制默认情况下,如果他们开始用前导零
只是一般的警告,clojure.core /读取字符串是完全不安全到在不受信任的输入上使用。如果不仔细管理,它将在读取时从字符串运行代码。
用户clojure.edn /读取字符串,而不是
它们都将读取一个八进制数给你就好了:
user> (clojure.edn/read-string "023")
19
user> (read-string "023")
19
而且clojure.edn /读取字符串将拒绝p0wn服务器:
user> (read-string "#=(println \"Pwning your server now\")")
Pwning your server now
nil
user> (clojure.edn/read-string "#=(println \"Pwning your server now\")")
RuntimeException No dispatch macro for: = clojure.lang.Util.runtimeException (Util.java:221)
所以它的价值在使用clojure.edn对所有数据的习惯是它不是你编程的,实际上一部分米
PS:您可以设置一个动态变量来关闭读取字符串的reader-eval功能,并根据它是一个等待发生的事故。
那么'a'应该是一个整型?整数的源表示不是其运行时表示的一部分,因此检查“数字是否以'0'开始”是没有意义的。 –
我的理解是,我写这个是为了理解如何为八进制数字创建错误处理,当目标是基数8时。例如,我希望能够将023更改为23,但不是23到27. – CS456
当我说“它没有意义”时,我的意思是回答你问的问题的必要信息在运行时不存在,所以你所问的是不可能的。在运行时,'023'与'(Integer/parseInt“10011”2)'完全相同,'23'与'(Integer/parseInt“10111”2)'完全相同。您无法取回源代码中使用的表示法。 –