Бит / байтовое преобразование - PullRequest
2 голосов
/ 11 ноября 2009

Сколько бит - строка .NET длиной 10 символов? (.NET строки UTF-16, верно?)

Ответы [ 4 ]

7 голосов
/ 11 ноября 2009

В 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 символов = 1004 * 256 бит = 32 байта

Я не уверен, увеличится ли размер блокировки до 64-битных в 64-битных системах. Я надеюсь, что нет, но вы никогда не знаете. Таким образом, служебная информация для 64-битной структуры составляет от 16 до 20 байт (в отличие от 12-битных в 32-битной)

4 голосов
/ 11 ноября 2009

Каждый символ в строке имеет размер два байта, поэтому, если вы просто конвертируете символы напрямую и не используете какую-либо конкретную кодировку, ответом будет строка. Длина * 2 * 8

в противном случае результат зависит от кодировки, вы можете написать:

int numbits = System.Text.Encoding.UTF8.GetByteCount(str)*8; //returns 80

или

int numbits = System.Text.Encoding.Unicode.GetByteCount(str)*8 //returns 160
1 голос
/ 11 ноября 2009

Если вы говорите на чистом Unicode-16, тогда:

10 символов = 20 байтов = 160 бит

Это действительно нуждается в контексте для правильного ответа.

0 голосов
/ 11 ноября 2009

Все сводится к тому, как вы определяете характер и как вы храните данные.

Например, если вы определяете символ как одну букву с точки зрения пользователя, он может быть больше 2 байтов, например, этот символ: Å - это две кодовые точки Unicode (U + 0041 U + 030A, Latin Capital A + Объединение кольца выше), поэтому для него потребуется два символа .net или 4 байта в UTF-16.

Теперь, даже если вы говорите о 10 элементах .net Char, тогда, если он находится в памяти, у вас есть некоторые накладные расходы на объекты (которые уже упоминались) и немного накладные расходы на выравнивание (в 32-битной системе все должно быть выровнено по границе 4 байта) в 64-битных правилах сложнее), поэтому в конце может быть несколько пустых байтов.

Если вы говорите о базе данных или файлах, то каждая база данных и файловая система имеют свои издержки.

...