2017-02-01 98 views
-1

我有一個包含以下映射哈希映射到映射....如何顯示,解密二進制代碼在HashMap中

HashMap <String , Integer>hm = new HashMap <String , Integer>(); 
    hm.put("e", 0); 
    hm.put("h",1); 
    hm.put("i", 2); 
    hm.put("k",3); 
    hm.put("l",4); 
    hm.put("r",5); 
    hm.put("s",6); 
    hm.put("t",7); 

與此相伴我有一個二進制序列,這是我已經從另一個獲得計算爲

1 0 10 100 1 10 111 100 0 101 

我的目標是從上面的哈希映射中得到這些二進制數字顯示的結果字符。

For example .... 001 = 1 = h 
       000 = 0 = e 
       010 = 2 = i 

此代碼是在密碼學中實現一次性密碼的程序的一部分。 我已經執行了加密以及解密。

參考答案3這裏的證明代碼:

storing charcter and binary number in a hash map

但我在努力顯示解密的二進制碼輸出,在我的哈希表的字母。

在此先感謝

+0

是否所有的值在'hm'地圖獨特之處? – flakes

+0

是的。他們都是獨一無二的 –

+0

當你的意思是「顯示」,你的意思是當你輸出hashmap時,你想要打印出一系列的二進制文件嗎? –

回答

0

您需要從價值的關鍵(這是的方式HashMap作品反向)映射。建立解密Map

Map<Integer, String> dec = new HashMap<>(); 
for (Map.Entry<String, Integer> kp : hm.entrySet()) { 
    dec.put(kp.getValue(), kp.getKey()); 
} 

然後你就可以通過解析您的輸入值int並獲得相應的值迭代這一點。像

String input = "1 0 10 100 1 10 111 100 0 101"; 
Stream.of(input.split("\\s+")).map(s -> dec.get(Integer.parseInt(s, 2))) 
     .forEachOrdered(s -> System.out.print(s + " ")); 
System.out.println(); 
+0

是它需要將二進制序列轉換爲字符串?可以在沒有轉換的情況下完成嗎? –

0

製作的價值觀,並且交換了行的新地圖。

final Map<String, Integer> hm = ... 
final Map<Integer, String> mapping = hm.entrySet().stream() 
    .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); 

現在你可以使用這個地圖做你查找:

final List<Byte> bytes = ... 
final List<String> keys = bytes.stream() 
    .map(mapping::get) 
    .collect(Collectors.toList());