長度爲10個字符的.NET字符串有多少位? (.NET字符串是UTF-16,是嗎?)位/字節轉換
位/字節轉換
回答
如果是指純的Unicode-16則:
10個字符= 20個字節= 160個比特
這確實需要一個上下文,以得到適當的回答。
請記住,Unicode有多個16位編碼。你在這裏談論的是UCS-2,它每個字符總是使用2個字節。另一方面,UTF-16使用一對或兩對字節對碼位進行編碼,因此可能需要超過20個字節來存儲10個字符。再次,這取決於你對角色的定義。 – Trillian 2009-11-11 15:52:33
上帝保佑!爲什麼Unicode很複雜! – 2009-11-11 20:23:27
在32位系統:
4 bytes = Type pointer (Every object has one of these)
4 bytes = Lock (One of these too!)
4 bytes = Length (Need the length)
2 * Length bytes = Data (And the chars themselves)
=======================
12 + 2*Length bytes
=======================
96 + 16*Length bits
所以10個字符會= 256位 = 32字節
我不知道如果鎖增長到64位的64位系統。我有點希望沒有,但你永遠不知道。因此,64位結構的開銷是16-20字節(與32位的12字節相反)。
哦,如果你想要走這條路線,那就沒有鎖定,而是一個虛擬表格。 – Gonzalo 2009-11-11 05:55:20
嗯,這是迂腐的,但是...是不是有正在進行的串聯實習? – 2009-11-11 05:56:32
@Gonzalo,vtable是第一個「類型指針」(不僅僅是一個vtable)。你確定沒有鎖嗎? – 2009-11-11 05:57:24
字符串中的每個字符的大小是兩個字節,所以如果你只是直接轉換的字符,而不是使用任何特定的編碼,答案是string.length減* 2 * 8
否則結果取決於編碼,你可以寫:
int numbits = System.Text.Encoding.UTF8.GetByteCount(str)*8; //returns 80
或
int numbits = System.Text.Encoding.Unicode.GetByteCount(str)*8 //returns 160
你存儲數據的這一切都歸結到你如何定義角色,以及如何。例如,如果您從用戶的角度將字符定義爲單個字母,則它可以超過2個字節,例如:Å是兩個Unicode代碼點(U + 0041 U + 030A,Latin Capital A +組合環以上),因此需要兩個.net字符或4個字節的int UTF-16。
現在,即使你在談論10個.net的char元素,如果它在內存中,你有一些對象開銷(已經提到過)和一些對齊開銷(在32位系統上,一切都必須對齊到4字節邊界,在64位的規則更復雜),所以你最後可能有一些空的字節。
如果您正在討論的數據庫或文件比每個數據庫和文件系統都有其自身的開銷。
- 1. 從字節轉換爲7位字節
- 2. 轉換位圖以字節
- 3. 將字節轉換爲位
- 4. Java位移位,短轉換爲字節
- 5. 八位字節到字符串轉換
- 6. 字節到字節[]轉換?
- 7. 將字節轉換爲位圖圖像
- 8. 從8位轉換爲1個字節
- 9. 將位圖轉換爲字節數組
- 10. 將字節轉換爲python中的位
- 11. 從BigInteger轉換爲八位字節?
- 12. 將位圖轉換爲字節[]
- 13. 如何將位轉換爲字節?
- 14. 將字節轉換爲GB,位於php
- 15. 如何將字節轉換爲位?
- 16. 將RGB8字節[]轉換爲位圖
- 17. 將字節轉換爲位集
- 18. 以度爲單位轉換千字節
- 19. 如何將字節[]轉換爲位圖?
- 20. 如何將字節數據轉換爲位並再次轉換回字節?
- 21. 如何從32位/ 24位從字節到16位轉換爲字節
- 22. 將字節串轉換爲7位字節列表
- 23. 類型轉換器轉換成字節[]爲位圖
- 24. 如何將8位字節轉換爲6位字符?
- 25. 字符串轉換爲字節轉換
- 26. 字符串轉換爲字節[]和轉換字節[]串
- 27. C++轉換字節
- 28. 轉換八位字節字符串轉換爲Unicode字符串,Python 3中
- 29. 如何從8位字節轉換爲7位字節(基地256基地128)
- 30. 通過反轉字節將小字節轉換爲大字節
你的意思是在內存中或序列化後的磁盤上?你是指Interned還是正常? 32位或64位? – 2009-11-11 05:55:39