簡體   English   中英

Java泛型將字節數組轉換為字符串(非十六進制,十進制)

[英]Java generic convert byte array to string (Non hex, decimal)

將字節數組轉換為具有所選基數的字符串的最佳方法是什么? 在SO和其他地方有大量示例轉換為十六進制字符串。 我在這里主要感興趣的是轉換為十六進制或十進制字符串以外的其他內容 ; 也是一種更通用的方式。

這就是我目前所做的事情:

byte[] input;
String MyStr = new BigInteger(input).toString(radix);

這是有效的,但由於Java具有基數的概念,如Integer中所使用的那樣。 這似乎是Character中定義的明確目的。 難道不應該有更好的方法來實現這一點,而不是先將字節數組轉換為BigInteger嗎? 感覺我的Java知識錯過了一些必要的標准類?

編輯:我想用它來表示(和打印)不同類型的原始二進制數據的壓縮方式。 這是我目前使用的實際基數:

String MyStr = new BigInteger(data).toString(Character.MAX_RADIX);

MAX_RADIX(36)使用小寫字母和數字的組合。 這給了一個不錯的壓縮,但如果基數可以包括UPPER字母會更好,這就是為什么我認為我可能會遺漏一些東西。

看起來你正在尋找Base64編碼。 這使用64個不同的字符來編碼一個值:大寫和小寫字母(已經是52個字符),數字(10個以上,包括'0'),以及'+'和'/'符號(或' - ')和url-safe變體中的'_')。

如果你使用的是Java 8,那就是Base64類:

String str = Base64.Encoder.encodeToString(data);

否則,Apache Commons也有一個Base64類:

String str = Base64.encodeBase64String(data);

這是一個很好的,實際上,我不確定是否有一個類來實現這一目標。 但是,在不使用BigInteger的情況下執行所需操作的另一種方法是迭代數組並獲取輸出,例如:

for(byte b : input){
    System.out.print(Integer.toString(b & 0xFF, radix));
}

不確定某個特定類正在進行轉換,但這是我所知道的另一種方法,可能對您或其他人有用。

快樂的編碼。

問候。

暫無
暫無

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

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