Convertir Octet binaire en Java
Je suis en train de convertir une valeur d'un octet binaire pour le transfert de données. En gros, je suis l'envoi d'une valeur comme "AC" en binaire ("10101100") dans un tableau d'octets où "10101100" est un seul octet. Je veux être en mesure de recevoir cet octet et le reconvertir en "10101100." Dès à présent je n'ai pas de succès à tous de ne pas vraiment savoir par où commencer. Toute aide serait super.
modifier: désolé pour la confusion, je n'ai pas de réaliser que j'ai oublié d'ajouter plus de détails.
Essentiellement, j'ai besoin d'utiliser un tableau d'octets à envoyer des valeurs binaires sur une connexion de socket. Je peux le faire mais je ne sais pas comment convertir les valeurs et les faire apparaître correctement. Voici un exemple:
J'ai besoin d'envoyer les valeurs hexadécimales ACDE48 et être en mesure de l'interpréter en arrière. Selon la documentation, je dois le convertir en binaire de la manière suivante: byte [] b={10101100,11011110,01001000}, où chaque place dans le tableau peut contenir 2 valeurs. J'ai donc besoin de convertir ces valeurs de retour après ils sont envoyés et reçus. Je ne suis pas sûr de savoir comment aller à ce sujet.
Vous voulez une chaîne avec la valeur "10101100" ou si vous voulez une variable d'octet contenant ce nombre?
Tangentielle question: avez-vous une raison pour laquelle vous êtes à la main, le laminage à votre propre sérialisation binaire au lieu d'utiliser l'un des grand nombre de formats standard qui viennent avec un support de bibliothèque?
De quelle manière? 0xAC == binaire 10101100.
Je pense que vous prenez les citations trop littéralement.
0xAC
== 0b10101100
OriginalL'auteur user1506919 | 2012-07-17
Vous devez vous connecter pour publier un commentaire.
Il y a quelques moyens plus simples pour gérer cela aussi (ce qui suppose que big endian).
et
fromBinary()
sans si des déclarations qui devraient accélérer la vitesse de votre code un peu. StringBuilder peut être prêtes pour la taille correcte par la fourniture de la taille dans le constructeur (bytes.length * Byte.SIZE
). Enfin, votre fromBinary accepte les chaînes non valides, par exemple, des chiffres de valeur'2'
est traduit en une valeur nulle bits.Je suis confus quant à pourquoi vous croyez que l'ordre des bits est non-standard. C'est le MSB en premier, mais en raison du fait que les octets sont signés vous avez des problèmes avec représentation décimale si le MSB est réglé. J'ai également ajouté presque tout ce que vous avez mentionné.
C'est de l'ESM pour chaque octet, avec l'indice le plus bas en premier. Vous aurez donc la plus faible octet de poids fort en premier, avec l'ordre le plus élevé de bits en premier. C'est très bien, mais j'ai de la documentation de ces choses avec soin (mais je suis un pain PITA au sujet des détails tels). C'est gentil à vous de faire les changements!
Je ne vois pas où endianness vient ici. Les octets sont jamais réunis, donc je ne sais pas où vous êtes obtenir le plus bas de l'ordre des bits est le premier.
Vous pouvez encore commander les octets de gauche à droite ou de droite à gauche, ne pouvez-vous pas?
OriginalL'auteur LINEMAN78
Pour la conversion hexadécimal en binaire, vous pouvez utiliser BigInteger pour simplifier votre code.
Octets sont envoyés sous forme binaire, sans traduction. Il fait ses la seulement type qui n'a pas besoin d'une forme de codage. Comme il n'y a rien à faire.
À écrire un octet en binaire
OriginalL'auteur Peter Lawrey
Alternative à @LINEMAN78s solution est:
OriginalL'auteur lidox