2011-01-31 18 views
41

Po prostu jestem zdezorientowany ... po prostu ile znaków w jednym kawałku?Ile bitów ma postać?

+3

Twoje pytanie nie ma większego sensu. Myślę, że trochę kontekstu może pomóc - jakie są twoje próby osiągnięcia? –

+47

Ile znaków jest bitowych? Trzy? b, i i t. –

+2

@Skurmedel: Twoje zmiany zmieniły znaczenie pytania. Bity i bajty to ** nie ** to samo! –

Odpowiedz

9

Istnieje 8 bitów w bajcie (zwykle w systemie Windows).

Jednakże, jeśli masz do czynienia z postaciami, będzie to zależeć od zestawu znaków/kodowania. Znak Unicode może składać się z 2 lub 4 bajtów, więc będzie to 16 lub 32 bity, podczas gdy Windows-1252 czasami niepoprawnie zwany ANSI ma tylko 1 bajt, a więc 8 bitów.

W azjatyckiej wersji systemu Windows i kilku innych cały system działa w trybie dwubajtowym, więc znak ma 16 bitów.

EDYCJI

komentarz Per Matteo, wszystkie współczesne wersje Windows użyciu 16-bity wewnętrznie za charakter.

+0

niektóre starsze aplikacje nadal używają 1-bajtowych znaków z lokalnymi stronami kodowymi, ale wszystkie wersje NT systemu Windows działają wewnętrznie z 2-bajtowymi znakami (UCS-2 do NT4, UTF-16 z systemu Windows 2000 i przechowywane jako 'wchar_t'), nie tylko azjatyckie, i tak powinno robić się wszystkie nowsze aplikacje. (W przypadku Linuksa jest to zupełnie inna historia, ponieważ zwykle w całym systemie używany jest kod UTF-8). –

+0

@Matteo: Zwróć uwagę, że w systemie Windows dwubajtowy to niekoniecznie to samo co Unicode. [Odnośnik] (http://msdn.microsoft.com/en-us/library/cc194788.aspx) –

+0

@Cody Grey: tak, zazwyczaj gdy czytasz "dwubajtowe", kodujesz jego starsze azjatyckie rzeczy i są one przechowywane jako wielokrotne 'char', podczas gdy łańcuchy Unicode są przechowywane za pomocą typu' wchar_t'. Nawiasem mówiąc, po uruchomieniu NT 'wchar_t' wystarczyłoby do uniknięcia par zastępczych, ale teraz, gdy jest to kodowanie UTF-16, nawet łańcuchy' wchar_t' mogą mieć znaki o zmiennej długości, więc w systemie Windows znak Unicode może przyjmować od 2 do 4 bajty (1 lub 2 'wchar_t'). –

98

To zależy jaki jest charakter i jakie kodowanie jest w:

  • znak ASCII w 8-bitowym kodowaniu ASCII jest 8 bitów (1 bajt), choć można go zmieścić w 7 bitów.

  • Znak ISO-8895-1 w kodowaniu ISO-8859-1 to 8 bitów (1 bajt).

  • Znak Unicode w kodowaniu UTF-8 zawiera się między 8 bitami (1 bajt) i 32 bitami (4 bajty).

  • Kod Unicode w kodowaniu UTF-16 zawiera się w przedziale od 16 (2 bajty) do 32 bitów (4 bajty), chociaż większość typowych znaków pobiera 16 bitów. Jest to kodowanie używane wewnętrznie przez system Windows.

  • Znak Unicode w kodowaniu UTF-32 ma zawsze 32 bity (4 bajty).

  • Znak ASCII w UTF-8 ma 8 bitów (1 bajt), a w UTF-16 - 16 bitów.

  • Dodatkowe (nie-ASCII) znaki w ISO-8895-1 (0xA0-0xFF) zajęłyby 16 bitów w UTF-8 i UTF-16.

To by znaczyło, że jest trochę od 0.03125 do 0.125 znaków.

+0

Ta odpowiedź bardzo pomaga podczas pracy z gniazdami, kodowaniem, tekstem i tak dalej. –