回答
user=> (require '[clojure.pprint :refer (cl-format)])
nil
user=> (cl-format nil "2r~6,'0',B" 12)
"2r001100"
這些函數使用java.util.Formatter生成和打印字符串。
但他們不這樣做的二進制,所以我可以拿出最好的是:
(fn [i] (str "2r" (Integer/toBinaryString i)))
啊,但格式沒有做二進制.. –
java.lang.Integer/toString將打印號碼任意基數:極端的
(Integer/toString 0xf2 2) ==> "11110010"
(Integer/toString 0xf2 16) ==> "f2"
(Integer/toString 0xf2 27) ==> "8q"
比cl-format解決方案更可讀, – ctpenrose
測試在這裏,使用(bit-shift-left 1 63)
,或1000000000000000000000000000000000000000000000000000000000000000
。
提供的cl-format
解決方案給我一個整數溢出。
Integer/toBinaryString
給我Value out of range for int: -9223372036854775808
。
但是Long/toBinaryString
給了我期望的字符串。
所有這些答案都很好,但要麼不支持二進制補碼的負數(cl-格式),要麼根據數據本身的寬度不會打印出正確的比特數(例如,在一個字節上調用Integer/toBinaryString或Integer/toString不會做你想要的,尤其是對於負數)。
這裏是一個將正確打印出來的底層數據的確切數據位的解決方案:
(defn print-bits [b]
(let [class-name (.getName (class b))
is-byte (= "java.lang.Byte" class-name)
num-bits (clojure.lang.Reflector/getStaticField class-name "SIZE")
format-string (str "~" num-bits "'0b")
bin-str-fn #(clojure.lang.Reflector/invokeStaticMethod
(if is-byte "java.lang.Integer" class-name)
"toBinaryString"
(to-array [%]))
bit-string (if is-byte
(str/join (take-last 8 (bin-str-fn (Byte/toUnsignedInt b))))
(bin-str-fn b))]
(println (str (str/join (repeat (- num-bits (count bit-string)) \0))
bit-string))))
- 1. 如何在javascript中按位數字打印二進制數字?
- 2. 打印二進制在Python
- 3. 如何在C中打印二進制數字的三角形#
- 4. 在LC-3組件中打印一個二進制數字
- 5. 在OCaml中打印二進制樹
- 6. 打印二進制數據的WScript
- 7. Python:打印二進制字符串
- 8. 打印二進制文件
- 9. 如何在haskell中以二進制或十六進制打印整數文字?
- 10. 如何在GDB中將二進制值(1010)打印成十進制值(10)?
- 11. 用php打印二進制數據
- 12. 打印非常長的二進制表示的整數值
- 13. 如何將二進制字節轉換爲可打印的數字值?
- 14. 在JavaScript中打印字節數組的十六進制或十進制值
- 15. 在android中發送非打印字符二進制短信
- 16. 如何在ASCII二進制字段中打印
- 17. 從小字節16進制值的長字符串中打印十進制值
- 18. 如何從shell中的二進制文件打印浮點值?
- 19. 如何在lua中打印從二進制文件中讀取的數字?
- 20. 打印列表的二進制排列
- 21. 打印出二進制樹的問題
- 22. 關於這個循環的建議,打印十進制數字到二進制
- 23. 按升序列印二進制數字
- 24. 如何將字符串的ASCII值作爲二進制數打印出來?
- 25. Java遞歸十進制到二進制函數向後打印
- 26. 打印出C中char *數組的十六進制值給出二進制輸入的奇數值
- 27. 如何在C中打印二進制數據?
- 28. 如何使用strtok打印二進制數字?
- 29. 從Google DataStore打印幾個二進制數據字段?
- 30. 如何在for循環中打印可被二進制整除的數字
這是偉大的,但是不能打印的二進制補碼錶示負數輸入。 – noisesmith