Char vs unsigned char de tableaux d'octets
Lors de l'entreposage de "tableaux d'octets" blob (...) est-il préférable d'utiliser char
ou unsigned char
pour les articles (unsigned char
un.k.un. uint8_t
)? (Standard dit que sizeof
des deux est précisément de 1 Octet.)
Importe-t-il à tous? Ou l'on est plus pratique ou le plus répandue que les autres? Peut-être, que les bibliothèques comme Boost n'utiliser?
OriginalL'auteur Cartesius00 | 2012-12-11
Vous devez vous connecter pour publier un commentaire.
Si
char
est signé, puis la mise à l'arithmétique sur une valeur d'un octet avec le haut l'ensemble de peu de volonté résultat dans l'extension du signe lors de la promotion deint
; ainsi, par exemple:donnera
0xfffffff0
au lieu de0xf0f0f0f0
. Ceci peut être évité par masquage avec0xff
.char
peut encore être préférable si vous êtes interfacer avec des bibliothèques de l'utiliser au lieu deunsigned char
.Noter qu'un cast de
char *
vers/à partir deunsigned char *
est toujours en sécurité (3.9p2). Une raison philosophique en faveur deunsigned char
est que 3.9p4 dans la norme favorise, au moins pour la représentation des tableaux d'octets qui peuvent accueillir des représentations de la mémoire des objets:OriginalL'auteur ecatmur
Théoriquement, de la taille d'un octet en C++ dépend du compilateur-paramètres et de la plate-forme cible, mais il est assuré d'être au moins 8 bits, ce qui explique pourquoi
sizeof(uint8_t)
est nécessaire pour être 1.Voici plus précisément ce qu'est le standard a à dire à ce sujet
§1.71
Donc, si vous travaillez sur certaines matériel spécial où les octets ne sont pas en 8 bits, il peut faire une grande différence. Sinon, je dirais que c'est une question de goût et des informations que vous souhaitez communiquer via le choix du type.
OriginalL'auteur Agentlien
ne fait pas de practcial différence, bien que peut-être une des raisons de lisibilité point de vue, il est plus évident de savoir si le type est
unsigned char
ce qui implique des valeurs entre 0 et 255.OriginalL'auteur Anders
L'un des autres problèmes avec éventuellement l'aide d'une valeur signée de gouttes est que la valeur dépend du signe de la représentation, qui n'est pas partie de la norme. Donc, il est plus facile d'invoquer un comportement indéfini.
Par exemple...
L'arithmétique réelle valeur strictement dépendent en complément à deux, ce qui peut donner à certaines personnes de surprises. L'aide non signé explicitement permet d'éviter ces problèmes.
OriginalL'auteur Jason