2011-11-08 28 views
10
user=> (char 65) 
\A 
user=> (char 97) 
\a 
user=> (str (char 65)) 
"A" 
user=> (str (char 97)) 
"a" 

Đây là các ký tự từ giá trị thập phân ascii ... Làm cách nào để nhận được giá trị thập phân ascii từ các ký tự?Làm thế nào tôi có thể nhận được giá trị thập phân ascii của các ký tự trong Clojure?

+3

Lưu ý, rằng Java và Clojure đang sử dụng Unicode (UTF-16), chứ không phải ASCII. Bạn có thể nhận được những thứ như '(char 0x439) => \ й' và' (int \ й) => 1081'. – ivant

Trả lời

10

Một ký tự là một số, nó chỉ là clojure đang hiển thị nó cho bạn như một char. Cách dễ nhất là chỉ cần cast char đó vào một int.

ví dụ:

user=> (int \A) 
65 
user=> (int (.charAt "A" 0)) 
65 
+0

Tôi sẽ thêm rằng bạn có thể làm toán trực tiếp trên nhân vật, nhưng có vẻ như bạn không thể ở Clojure. Nó được đại diện như một java.lang.Character (chứ không phải là một char), và Character không mở rộng java.lang.Number, do đó, toán tử toán học không làm việc ra khỏi hộp trên các ký tự trong Clojure. – Bill

+0

giống như với các ký tự nguyên thủy trong Java - Tôi không nghĩ rằng bạn có thể thêm chúng. – amalloy

+0

Là một người mới ở Clojure Tôi chưa thích nghi với nhiều khả năng của mình. Cảm ơn bạn đã đưa tôi trên con đường của tôi. – logigolf

10
user=> (doseq [c "aA"] (printf "%d%n" (int c))) 
97 
65 
nil 
user=> (map int "aA");; 
(97 65) 
user=> (apply str (map char [97 65])) 
"aA" 
+0

Cách đẹp để chuyển đổi chuỗi thành giá trị thập phân của nó !! – logigolf

Các vấn đề liên quan