2015-11-23 181 views
-2

我正在生成一些我需要的大小爲k(位)的隨機密鑰。我想要他們在二進制格式。如預期的那樣,其左邊比特爲0的鍵具有小於k的尺寸。我想格式化這些字符串,使它們有缺失的零並再次具有k位的大小。爲什麼我得到IllegalFormatConversionException?

事情是return String.format("%0128d", bg.toString(2));結果在java.util.IllegalFormatConversionException: d != java.lang.String。我究竟做錯了什麼?

// Method to generate random keys of k bits each 
public String keyGenerator(int k) { 

    SecureRandom srandom = new SecureRandom(); 
    // Constructor: BigInteger(int numBits, Random rnd) 
    // Create a random big integer of k bits using secure random 
    BigInteger bg = new BigInteger(k, srandom); 

    // If the very left values are zeros they disappear. We need to pad the String to have k bits 
    if (bg.toString(2).length() < k) { 
     return String.format("%0128d", bg.toString(2)); 
    } 

    // Return the bg with radix 2 (= show it in binary) 
    return bg.toString(2); 

} 
+2

'%d'用於格式化整數。你給它一個字符串。 – khelwood

回答

0

%d是顯示整數。如果要將字符串顯示爲bg.toString() ,則必須使用%s並正確格式化。

有關所有格式化程序選項的信息,請參閱http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

+0

我覺得很蠢,雖然'返回String.format(「%0128s」,bg.toString(2));'也不起作用。我得到一個'java.util.FormatFlagsConversionMismatchException:Conversion = s,Flags = 0'異常。 – Aventinus

+1

請檢查以BigDecimal開頭的段落。 %0不允許用於字符轉換:即:不能用0填充字符串.... – JFPicard