en Java, comment une représentation stricte hexadécimale d'un octet (par exemple "1e") peut-elle être convertie en une valeur d'octets?
Par exemple: P>
byte b = ConvertHexStringToByte("1e");
3 Réponses :
Integer.parseInt(str, 16);
J'ai essayé cela, mais cela crée un int, pas un octet - donc pour "1E", je n'aurais pas 30 ans, pas 0x1e, même si je mets à un octet.
Comment distingueriez-vous un octet de la valeur 30 et 0x1e, qui sont stockés de manière identique en cas d'octet de type?
@phpscriptCoder: Non, vous obtiendrez 1e. Essayez ceci: String Roundtrip = Integer.tohexstring (Integer.parseint (Str, 16));
Utilisation de la méthode avec le byte.parsebyte code>
retournera un octet code> en analysant une représentation de chaîne.
(chaîne, int) < / Code> Signature, le radix peut être spécifié comme 16, on peut donc analyser une représentation hexadécimale d'un octet: p>
Danger! Cette méthode ne parviendra pas à analyser les valeurs d'octets négatifs, par exemple "AD". Voir Bugs.sun.com/bugdatabase/view_bug.do?bug_id=6259307 a>. Mieux utiliser Integer.parseint
@Dave L. Ce n'est pas correct car selon l'évaluateur: la méthode en question se comporte exactement comme spécifié. Avec cette méthode, une valeur négative doit être indiquée en utilisant un signe moins "-" et ne pas régler le bit de signalisation en ayant le bit de commande élevé en être un. En d'autres termes, pour la base 16, les chaînes valides vont de "-80" (-128) à "7f" (127); "Ad" base 16 est positif 173 qui est hors de portée.
@Las_vegas effectivement byte.parsebyte effectue comme spécifié, cependant, si quelqu'un souhaite convertir une représentation hexagonale de 2 caractères d'une valeur 8 bits à l'octet correspondant, comme indiqué par le questionneur, cette méthode (comme spécifié et implémenté!) Faites-le pour les valeurs où le bit de commande élevé est 1.
Vous avez des commentaires sur l'analyse des octets négatifs Dave?
Vous pouvez utiliser byte.parsebyte ("a", 16); code>
Mais cela ne fonctionnera que pour des valeurs jusqu'à 127,
Les valeurs plus élevées que cela devront être lancées à des octets, en raison de problèmes signés / non signés
Je recommande donc de le transférer à un int puis de le jeter en octet
& 0XFF est utilisé pour obtenir une valeur non signée de Int.
Cela devrait être la réponse acceptée! C'est exactement ce dont j'avais besoin!
Alors, quelle est votre question? Si seulement?
C'était une bonne question. Pourquoi était-ce fermé?
D'accord avec @joe. Mais voir aussi Stackoverflow.com/Questtions/9655181/...