Ile bitów lub bajtów zawiera znak? [Zamknięte]

96

Ile bitów lub bajtów przypada na „znak”?

RedKing
źródło
1
Twoje pytanie i tytuł dotyczą różnych rzeczy. W każdym razie, nie rozumiem cię, czy możesz wyjaśnić dalej?
galymzhan
Tak, tego też nie byłem pewien. Ale bajt jest bardziej zgodny z jego tytułem. Ilość znaków w jednym kawałku nie ma sensu, ale ile bitów w znaku ma sens. Wymaga jednak kontekstu, jak wspomniano powyżej.
Skurmedel
4
@Skurmedel: Jak oceniasz? Tytuł również mówił „bity”.
Cody Gray
@Cody Gray: Spójrz na moją zredagowaną odpowiedź. Jego tagi mówią bajt, więc pomyślałem, że to literówka. Chociaż mogę się mylić.
Skurmedel
@Skurmedel: Nie rozumiem ... Nie opublikowałeś odpowiedzi na pytanie. I tak, wcześniej nie zauważyłem tagu. Ale wciąż jestem skłonny sądzić, że 2/3 to lepsze dopasowanie niż 1/3.
Cody Gray

Odpowiedzi:

200

To zależy, jaki jest znak i jakie jest kodowanie:

  • Znak ASCII w 8-bitowym kodowaniu ASCII ma 8 bitów (1 bajt), chociaż może zmieścić się w 7 bitach.

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

  • Znak Unicode w kodowaniu UTF-8 ma długość od 8 bitów (1 bajt) do 32 bitów (4 bajty).

  • Znak Unicode w kodowaniu UTF-16 ma rozmiar od 16 (2 bajty) do 32 bitów (4 bajty), chociaż większość typowych znaków ma 16 bitów. To jest 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), aw UTF-16 - 16 bitów.

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

Oznaczałoby to, że w kawałku jest od 0,03125 do 0,125 znaków.

Rosz Oksymoron
źródło
Ta odpowiedź bardzo pomaga w przypadku gniazd, kodowania, tekstu i tak dalej.
Mário Meyrelles
17

W bajcie jest 8 bitów (normalnie mówiąc w Windows).

Jeśli jednak masz do czynienia ze znakami, będzie to zależeć od zestawu znaków / kodowania. Znak Unicode może mieć 2 lub 4 bajty, czyli 16 lub 32 bity, podczas gdy Windows-1252 czasami nieprawidłowo nazywany ANSI ma tylko 1 bajt, czyli 8 bitów.

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

EDYTOWANO

Zgodnie z komentarzem Matteo, wszystkie współczesne wersje systemu Windows używają 16-bitów wewnętrznie na znak.

RichardTheKiwi
źródło
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 ze znakami 2-bajtowymi (UCS-2 do NT4, UTF-16 od Windows 2000 i nowsze, przechowywane jako wchar_t), nie tylko azjatyckie, i tak powinno być w przypadku wszystkich nowszych aplikacji. (Zamiast tego w Linuksie jest to zupełnie inna historia, ponieważ zwykle UTF-8 jest używany w całym systemie)
Matteo Italia
@Matteo: Zwróć uwagę, że w systemie Windows dwubajt niekoniecznie jest tym samym, co Unicode. Odniesienie
Cody Gray
@Cody Grey: tak, zwykle kiedy czytasz kodowanie „dwubajtowe”, to starsze azjatyckie rzeczy i są one przechowywane jako wiele char , podczas gdy łańcuchy Unicode są przechowywane przy użyciu wchar_ttypu. Nawiasem mówiąc, kiedy NT zostało uruchomione, wchar_twystarczyło, aby uniknąć par zastępczych, ale teraz, gdy jest to UTF-16, nawet wchar_tłańcuchy mogą mieć znaki o zmiennej długości, więc w systemie Windows znak Unicode może zająć od 2 do 4 bajtów (1 lub 2 wchar_t).
Matteo Italia
@Matteo: Tak, zgadzam się z tobą. Wydaje mi się, że widziałem coś, co sugerowało inaczej, zanim zredagowałeś swój pierwszy komentarz i właśnie wtedy napisałem swój. Łańcuchy Unicode UTF-16 są teraz używane wewnętrznie we wszystkich wersjach systemu Windows.
Cody Gray
@Cody Grey: Zwykle trochę za bardzo edytuję swoje komentarze, prowadzi to do zamieszania:)
Matteo Italia