taille de type char en c#
Demandais juste pourquoi nous avons char
type de 2 octets taille en C# (.NET) contrairement à 1 de l'octet dans d'autres langages de programmation?
Vous devez vous connecter pour publier un commentaire.
Demandais juste pourquoi nous avons char
type de 2 octets taille en C# (.NET) contrairement à 1 de l'octet dans d'autres langages de programmation?
Vous devez vous connecter pour publier un commentaire.
Un char est de l'unicode en C#, donc le nombre de caractères dépasse 255. De sorte que vous aurez besoin de deux octets.
ASCII étendus, par exemple, a un 255-char, et peut donc être stocké dans un octet. C'est aussi le but de l'
System.Encoding
espace de noms, comme les différents systèmes peuvent avoir différents jeux de caractères, et l'omble de tailles. C# peut donc gérer un/quatre/etc. char octets, mais Unicode UTF-16 est par défaut.char
s.Je devine avec “autres langages de programmation” vous dire C. C a en fait deux différentes
char
types:char
etwchar_t
.char
peut être un octet de long,wchar_t
pas nécessairement.En C# (et .NET) pour cette question, toutes les chaînes de caractères sont codés en Unicode en UTF-16. C'est pourquoi un
char
dans .NET représente un seul UTF-16 code unité qui peut être un point de code ou la moitié d'une paire de substitution (et non pas un personnage, à l'époque).En fait C#, ou plus exactement du CLR, la taille de char est compatible avec la plupart des autres langages managés. Géré langages, comme Java, ont tendance à être plus récents et des articles comme support de l'unicode construit à partir du sol. Le prolongement naturel de soutenir des chaînes unicode est à unicode de char.
Plus anciens langages tels que le C/C++ a commencé en ASCII, et seulement plus tard ajouté le support de l'unicode.
En raison d'un caractère dans un C# string par défaut l'encodage UTF-16 de l'Unicode, qui est de 2 octets (par défaut).
Parce que les chaînes de dans .NET sont codés comme 2 octets Unicode charactes.
C# à l'aide de 16 bits largeur de caractère a probablement plus à voir avec la performance plutôt qu'autre chose.
Tout d'abord, si vous utilisez UTF-8, vous pouvez adapter chaque caractère dans la "bonne" quantité d'espace. C'est parce que l'UTF-8 est de largeur variable. ASCII les caractères sur 8 bits alors que les plus grands personnages vont utiliser plus.
Mais de longueur variable de codage de caractères encourage une O(n) la complexité de l'algorithme dans les scénarios courants. E. g. Récupération d'un personnage à un endroit particulier dans une chaîne de caractères. Il y a eu des débats publics sur ce point. Mais la solution la plus simple est de continuer à l'aide d'une largeur de caractère qui s'adapte à la plupart de votre jeu de caractères, de tronquer les autres. Maintenant, vous avez un caractère fixe largeur.
À proprement parler, UTF-16 est aussi une largeur variable de codage, de sorte que C# ( et Java d'ailleurs ) sont en utilisant quelque chose d'un hybride depuis leur largeur des caractères ne sont jamais 32 bits.