2012-10-30 109 views
-1

我有一個簡單的問題。 正如我們所知,Char需要兩個字節(16位),並且Byte需要一個字節(8位)。 但是在許多編程語言中,有一個將Char轉換爲Byte的功能。如何將Char轉換爲Byte而不會丟失任何東西?如何將char轉換爲字節?

+0

我的意思是如何將16位信息放到它的一半,到8位 – RustamIS

+0

我得到了這個問題downvote。但在'SCALA'朗。它有'CHAR'轉換爲'BYTE'的方法,這個名字叫'toByte' – RustamIS

回答

3

在C#和java中char是一個16位的Unicode字符。在其他(較舊的?)語言(C,C++等)中,char是ASCII字符的8位表示。在這些語言中,轉換類型並不會丟失任何東西是有意義的。

在C#中,你可以轉換char s到兩倍多byte S,或假設(一定真的),該char是你們等正試圖轉換爲8個char S(看看ASCII表)寫爲Unicode char s。

1

這是不可能的。我不認爲有這樣的功能附帶任何語言。例如,Java有String.getBytes,C#有Encoding.GetBytes,他們得到的是byte,而不是byte。這種轉換就像在C中從short[]char[]一樣,非常簡單,沒有操縱,只是投射,整個對象的大小(總字節數)保持不變;沒有東西丟失。

+0

是的,我同意你的觀點,但是在SCALA中char是16bit,它必須有返回該char的8bit值的Byte函數,也許它是不關心值溢出 – RustamIS

+0

我剛剛檢查了scala API,它的Char類有一個toByte。但我認爲它只是一個不安全的轉換,就像'int i = 42; char c =(char)i;',如果一個UTF-16字符表示一個ASCII字符,可以將它從寬字符轉換爲一個字節,因爲unicode是ASCII的超集,字符在0到127之間的值與ASCII對應的含義相同。但是,只要文本包含ASCII以外的字符,例如德國人或中國人,以這種方式鑄造會產生垃圾。 – Need4Steed

+0

是需要4保證你是對的,這是不安全的鑄造。我也檢查過 – RustamIS