2010-11-21 51 views
1

問:在Java中將int轉換爲char時,似乎默認結果是與該int值對應的ASCII字符。我的問題是,是否有某種方法來指定鑄造時要使用的不同字符集? (背景信息:我正在研究一個項目,在該項目中,我讀取了一串二進制字符,將其轉換爲塊,並將塊轉換爲十進制的int值,然後將其轉換爲字符。然後,我需要能夠通過反轉過程將生成的壓縮字符「擴展」回二進制。 我已經能夠做到這一點,但目前我只能夠將最多6個「位」壓縮爲單個字符,因爲當我允許更大的數量時,有一些範圍內的值看起來不能很好地被ASCII處理;它們變成了方框或問號,當它們被轉換回int時,它們的原始值沒有被保存如果我可以使用另一個字符集,我想我可以避免這個問題,並一次壓縮8位二進制數,這是我的目標。)在java中將char轉換爲char - 我必須使用ASCII嗎?

我希望這是清楚的,並提前感謝!

+3

「一串二進制字符」,是吧? – BalusC 2010-11-21 20:39:33

+0

整數> 0和<128甚至<255? – Cratylus 2010-11-21 21:33:58

回答

1

字符和整數之間的轉換使用Unicode值,其中ASCII是子集。如果你正在處理二進制數據,你應該避免字符和字符串,而是使用整數數組 - 注意Java沒有無符號的8位整數。

+0

他提到他*從int轉換爲char。這與字符集無關:字符只不過是16位整數;鑄造只保留低16位並丟棄高16位。 – Grodriguez 2010-11-21 22:31:12

+0

@Grodriguez:'char'是一個16位整數*,其含義與文本*相關。事實上它是16位,這更像是一個歷史性的巧合 - 它可能很容易就有24位。如果你只是想要一個16位整數,你應該使用「short」。使用'char'來存儲任意的二進制數據不是一個好方法 - 這不是'char'設計的。 http://stackoverflow.com/questions/1841461/unsigned-short-in-java/1841471#1841471 – 2010-11-21 22:37:55

+0

無論「預期用途」,事實是char *是一個16位無符號整數。雖然我同意使用char來存儲二進制數據不是一個好方法,但說「字符和整數之間的轉換使用Unicode值」是誤導性的。從int到char的轉換導致由JLS(http://java.sun.com/docs/books/jls/second_edition/html/conversions.doc.html#25363)定義的縮小原始轉換。 – Grodriguez 2010-11-22 07:12:44

3

你的問題與ASCII或字符集無關。

在Java中,char只是一個16位整數。當將整數(32位整數)轉換爲字符時,您唯一要做的就是保留int的16個最低有效位,並丟棄高16位。這被稱爲縮小轉換

參考文獻:

+1

如果您向我們展示一些代碼,或許我們可以更好地幫助您(http://sscce.org/) – Grodriguez 2010-11-21 20:39:32

0

什麼你不投搜索,這是一個轉換。

有一個String構造函數,它接受一個字節和一個字符集編碼的數組。這應該對你有所幫助。

+0

謝謝,我確實瞭解了這種方法。我只是想知道是否有辦法改變鑄造的工作方式,因爲這意味着我可以通過簡單的修改來改進現有的實施。 – 2010-11-21 22:37:23

0

我的工作中,我的二進制字符的字符串 閱讀項目, 其轉換成塊,並轉換 大塊到他們的價值觀 十進制整數,然後我作爲投 字符。然後,我需要能夠通過反轉 將 「結果」壓縮的 字符「擴展」回二進制。

你不提爲什麼你正在做的,和(說實話),這是一個有點難以跟隨你試圖描述(對於一件事是什麼,我不明白爲什麼所產生的字符將以任何方式被「壓縮」。

如果您只是想將二進制數據表示爲文本,那麼有大量的standard ways即可完成此操作。

+0

對不起,我只是不想讓牆上的文字沒有人會對閱讀感興趣。 – 2010-11-21 22:26:31

+0

Errr,沒有實現敲擊Enter會張貼,讓我詳細說明:該項目涉及到霍夫曼編碼;我們需要將.txt文件中的文本轉換爲二進制文件,並能夠解碼該二進制文件以獲取原始文本。如果我們能夠以壓縮格式存儲編碼文本,我們提供了一項獎勵,並且我決定只是簡單地抓住二進制文件,而不是打印零點和一點數字,而是採用二進制塊的十進制值並將其轉換爲字符,給我許多人一個角色。這就是我所說的壓縮。 – 2010-11-21 22:30:20

+0

是的,我發現還有其他的方法可以達到這個目的,但是在這一點上我已經完成了這個項目,但是因爲某些值不會產生一個字符,當它作爲一個char被鑄造出來時,它保留了這個值,我只能通過一次取6個二進制字符來工作。我只是想知道是否有強制轉換使用其他字符集的方法,所以我可以嘗試找到一個適用於例如大塊8的方法。 – 2010-11-21 22:34:50