2013-06-04 38 views
0

16位字符我怎樣才能創建一個變量字符,可容納四個字節的值?我無法使用Java創建

我試圖寫一個程序來加密在java中的消息,爲了好玩。我想出瞭如何使用RSA,並設法編寫一個程序來加密消息並將其保存爲.txt文件。 例如,如果輸入「安靜」,結果將是「041891090280」。我寫了我的代碼,以便數字的長度總是6的倍數。所以我認爲我可以將數字轉換爲哈希碼。前三個字母是「041」,所以我可以將其轉換爲「)」。

但是我無法創建一個字符與一些比255我在網上看了看周圍,發現了幾個例子更大,但我無法弄清楚如何實現它們。我創建了一個新方法來測試它們。

int a = 256; 
char b = (char) a; 
char c = 0xD836; 
char[] cc = Character.toChars(0x1D50A); 
System.out.println(b); 
System.out.println(c); 
System.out.println(cc); 

程序輸出

我只得到兩個字節。我讀到Java使用的Unicode應該高​​達65535,這是四個字節。如果這有所作爲,我正在使用eclipse。

我的小白問題道歉。 並提前致謝。

編輯 對不起,我想我提供了太多的信息,並最終陷入困惑。 我想要做的是將一串數字存儲爲一個unicode字符的字符串。我知道如何做到這一點的唯一方法是將數字串分成足夠小以適合角色。然後將字符逐個添加到新字符串中。但我不知道如何將一個可變的unicode字符添加到字符串中。

+0

Java中的字符不會編碼任何字符,只能編碼基本多語言平面的字符。 –

+0

見http://stackoverflow.com/questions/13112435/how-does-java-store-utf-16-characters-in-its-16-bit-char-type –

+0

對不起,我意識到,我說32位的瓦時我應該說16bit。 – user2452405

回答

0

所有字符都是16位了。 0到65535只需要16位和2^16 = 65536

注意:不是所有的字符都是有效的,特別是,0xD800到0xDFFF用於編碼代碼點(超過65536個字符)

如果您希望能夠存儲我建議您使用short的所有可能的16位值。您可以存儲相同的值,但可能不太令人困惑。

+0

我試着將256保存爲short(a),然後創建一個char c =(char)a;但它返回一個「?」正如所有創建的值高於255的字符一樣。你可以如此善良,以顯示一個noob這個工作的例子。我試圖用三種不同的方法創建一個char,但是我不能讓它們中的任何一個工作。 – user2452405

+0

當你顯示一個字符時,你的顯示編碼和字體就會發揮作用。無論您是否可以顯示角色,都不表示角色已正確存儲。您可能必須使用不同的字體。有可能你的系統上沒有字體顯示每個可能的字符值,許多字符根據定義不是真正的字符。我建議你將字符顯示爲4個字節的十六進制。這將適用於所有角色。 –

+0

注意:某些字符在正確顯示時不可見,而字符\ u202e會導致所有字符以相反的順序顯示。我相信這不會爲你工作,你是假設對於每一個可能的字符值都有一個簡單的,普遍的顯示錶示,但事實並非如此。 –