En Java, comment une représentation en chaîne hexadécimale d'un octet (par exemple "1e") peut-elle être convertie en une valeur d'octet?Conversion d'une chaîne hexadécimale en octet en Java
Par exemple:
byte b = ConvertHexStringToByte("1e");
En Java, comment une représentation en chaîne hexadécimale d'un octet (par exemple "1e") peut-elle être convertie en une valeur d'octet?Conversion d'une chaîne hexadécimale en octet en Java
Par exemple:
byte b = ConvertHexStringToByte("1e");
Integer.parseInt(str, 16);
J'ai essayé cela mais cela crée un int, pas un octet - donc pour "1e" j'obtiendrais 30, pas 0x1e, même si je lance un octet. – phpscriptcoder
Comment distingueriez-vous un octet de valeur 30 et 0x1e, qui sont stockés de manière identique lors du type byte? –
@phpscriptcoder: Non, vous obtiendrez 1e. Essayez ceci: String roundtrip = Integer.toHexString (Integer.parseInt (str, 16)); – erickson
Byte.parseByte
retourne une byte
par l'analyse d'une représentation de chaîne.
En utilisant la méthode avec la signature (String, int)
, le radix peut être spécifié comme 16, on peut donc analyser une représentation hexadécimale d'un octet:
Byte.parseByte("1e", 16);
Danger! Cette méthode échouera à analyser les valeurs d'octets négatifs, par exemple, "AD". Voir http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6259307. Mieux vaut 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 définir le bit de signe en ayant le bit de poids fort un. En d'autres termes, pour la base 16, les chaînes valides vont de "-80" (-128) à "7f" (127); La base "AD" 16 est positive 173, ce qui est hors de portée. – Caner
@LAS_VEGAS En effet Byte.parseByte fonctionne comme spécifié, cependant si quelqu'un veut convertir une représentation hexadécimale de 2 caractères d'une valeur de 8 bits à l'octet correspondant, comme implicite par le questionneur, alors cette méthode (telle que spécifiée et implémentée!) Ne faites pas cela pour les valeurs où le bit de poids fort est 1. –
Vous pouvez utiliser Byte.parseByte("a", 16);
mais cela ne fonctionnera que pour les valeurs jusqu'à 127, des valeurs plus élevées alors que devront jeter à l'octet, en raison de problèmes signés/non signés donc je recommande de le transférer à un entier, puis le jeter à l'octet
(byte) (Integer.parseInt("ef",16) & 0xff);
: Pourquoi '& 0xff'? –
& 0xff est utilisé pour obtenir la valeur non signée de int. – JCasso
Cela devrait être la réponse acceptée! Il fait exactement ce dont j'avais besoin! – VikingPingvin
alors quelle est votre question? Si seulement? – EJP
C'était une bonne question. Pourquoi était-il fermé? – Joe