簡體   English   中英

如何直接使用Clojure中的位?

[英]How can I directly work with bits in Clojure?

我前幾天開始解決https://cryptopals.com上的第一個問題。 我正在嘗試同時學習Clojure,所以我想我將在Clojure中實現所有練習。 這些練習當然是出於學習目的,但除了clojure.core和Java標准庫之外,我不會使用任何庫。 第一個練習要求您編寫代碼,該代碼接收以十六進制編碼的字符串並吐出以base64編碼的字符串。 執行此操作的算法非常簡單:

  1. 獲取與每個十六進制數字對應的字節(例如,十六進制49變為01001001 )。
  2. 一旦檢索到十六進制字符串的所有字節,就將字節列表轉換為單個位的序列。
  3. 對於每6位,返回一個base64字符(它們都表示為6位的單位)。

我在Clojure中實際表示/處理位和字節時遇到了麻煩(對原始字節進行操作是練習的要求之一)。 我知道我可以在初始十六進制值上執行byte-array並返回一個字節數組,但是如何訪問原始位以便我可以從一系列字節轉換為base64編碼的字符串? 任何幫助或方向將不勝感激。

始終保持瀏覽器選項卡對Clojure CheatSheet打開。

對於詳細的位工作,您需要bit-and bit-test等功能。

如果您只是解析十六進制字符串,請參閱基於radix選項的java.lang.BigInteger: https//docs.oracle.com/en/java/javase/11/docs/api/java.base/java/math/ BigInteger.html#%3Cinit%3E(java.lang.String中,INT)

java.lang.Long / parse(string,radix)也很有用。

對於base64部分,您可能對tupelo.base64函數感興趣。 這個庫函數是你真正需要的將十六進制字符串轉換為base-64字符串,盡管它可能不算你的功課!

請注意,Java包含base-64函數:

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Base64.html

還要記住,通過查看Clojure和Tupelo lib的源代碼,您可以獲得想法。


而且 ,請記住,Clojure的超級權力之一是能夠在本機Java中編寫低級或性能關鍵代碼,然后將所有*.clj*.java文件鏈接到一個程序中(您可以使用) Leiningen一步編譯和鏈接所有內容)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM