Représentant les caractères d'un octet en Java
Je dois convertir un char en un octet ou d'un tableau d'octets. Dans d'autres langues que je connais qu'un char est juste un seul octet. Cependant, en regardant la Java de la classe de Caractères, sa valeur min est \u0000 et sa valeur max est \uFFFF. De ce fait, il semble comme un char est de 2 octets de long.
Vais-je être en mesure de stocker un octet ou dois-je besoin de le stocker comme deux octets?
Avant que quiconque demande, je vais dire que je suis en train de faire cela parce que je suis en train de travailler sous une interface qui attend mes résultats à un tableau d'octets. Donc, je dois convertir mon char pour un.
S'il vous plaît laissez-moi savoir et de m'aider à comprendre cela.
Grâce,
jbu
Vous devez vous connecter pour publier un commentaire.
Pour convertir les caractères d'octets, vous devez spécifier un l'encodage des caractères. Certains codages de caractères utiliser un octet par caractère, tandis que d'autres utilisent deux ou plusieurs octets. En fait, pour de nombreuses langues, il y a beaucoup trop de personnages pour encoder avec un seul octet.
En Java, le moyen le plus simple pour convertir des personnages octets est avec le
String
de la classegetBytes(jeu de caractères)
méthode. (LeStandardCharsets
classe définit quelques encodages.) Cependant, cette méthode silencieusement remplacer des caractères � si le personnage ne peut pas être mappé en vertu de l'encodage spécifié. Si vous avez besoin de plus de contrôle, vous pouvez configurer unCharsetEncoder
pour gérer ce cas d'une erreur ou d'utiliser un autre caractère de remplacement.char
valeurs > 127), vous devez utiliser un encodage API pour convertir des octets. Les caractères non-ASCII besoin de deux ou plusieurs octets en UTF-8. Si vous avez simplement fonte de caractères dans la plage de 128 à 255 octets, les mauvais caractères seront décodés.Un char est en effet de 16 bits en Java (et qui est aussi le seul type non signé!!).
Si vous êtes sûr que le codage des caractères ASCII, alors vous pouvez simplement les jeter sur un octet (depuis ASCII utilise que la partie inférieure de 7 bits du char).
Si vous n'avez pas besoin de modifier les caractères, ou de comprendre leur signification au sein d'une Chaîne, vous pouvez stocker des caractères sur deux octets, comme:
(Il peut être conseillé de remplacer le 2* par un décalage à droite, si la vitesse de questions).
Noter cependant que certains réel (affiche) caractères (ou, plus exactement, le code Unicode-points) sont écrits sur deux caractères consécutifs. Donc, la coupe entre deux caractères ne permet pas de s'assurer que vous êtes de coupe entre les caractères réels.
Si vous avez besoin de décoder/encoder ou manipuler votre char tableau dans une Chaîne-conscient, vous devriez plutôt essayer de décoder et d'encoder vos char tableau ou une Chaîne à l'aide de java.les outils d'oi, que d'en assurer le bon caractère de manipulation.
Pour prolonger ce que disent les autres, si vous avez un char que vous avez besoin comme un tableau d'octets, puis vous commencez à créer une Chaîne de caractères contenant le char, puis obtenir le tableau d'octets de la Chaîne:
Bien sûr, utiliser le jeu de caractères approprié. Beaucoup plus efficace que ce serait pour commencer à travailler avec des Chaînes de caractères plutôt que de prendre un char à un moment, de convertir une Chaîne de caractères, puis de les convertir à un tableau d'octets.
char en java est un entier non signé de 16 bits de la valeur. Si ce que vous avez à l'adaptation de 7 bits puis il suffit de faire la conversion vers un octet (par exemple ASCII sera adaptée).
Vous pourriez la caisse de la java.nio.charset Api ainsi.