Magasin séquence binaire dans le tableau d'octets?
J'ai besoin de stocker un couple binaire des séquences qui sont sur 16 bits dans un tableau d'octets (de longueur 2). Un ou deux nombres binaires ne changent pas, une fonction qui effectue la conversion peut être exagéré. Disons, par exemple, les 16 bits séquence binaire est 1111000011110001. Comment dois-je stocker dans un tableau d'octets de longueur, deux?
Comment avez-vous les bits maintenant? Sont-ils dans un nombre entier? Une Chaîne De Caractères?
Reportez-vous à mon post pour une approche générale pour ces conversions.
Reportez-vous à mon post pour une approche générale pour ces conversions.
OriginalL'auteur Roger | 2011-03-23
Vous devez vous connecter pour publier un commentaire.
Il y a d'autres options, mais j'ai trouvé qu'il est préférable d'utiliser
BigInteger
classe, qui a conversion en tableau d'octets, pour ce genre de problèmes. Je préfère si, parce que je peux instancier la classe deString
, qui peuvent représenter des bases différentes de 8, 16, etc. et aussi de sortie en tant que tel.Edit: Le Lundi ... 😛
Exemple:
J. J. je n'étais pas sûr, si vous avez compris ma première réponse, j'ai donc fait un exemple. Dans cet exemple, j'ai un nombre entier, qui stocke le tableau de bits. Je la convertir en chaîne de caractères représentant la forme binaire. Ensuite, j'appelle une fonction qui renvoie les tableaux d'octets 2 premiers octets. Je n'étais pas sûr, si il serait difficile pour vous de vérifier la sortie, j'ai donc ajouté une ligne de sortie. Elle doit imprimer
12321:11000000100001:[33, 48]
.OriginalL'auteur Margus
J'ai été déçu avec toutes les solutions que j'ai trouvé à la conversion de chaînes de bits à des tableaux d'octets, et vice-versa -- tous ont été buggy (même les BigInteger solution ci-dessus), et très peu sont aussi efficaces qu'ils devraient l'être.
Je me rends compte que l'OP été intéressée uniquement par une chaîne de bits dans un tableau de deux octets, ce qui le BitInteger approche semble bien fonctionner pour. Cependant, depuis ce poste est actuellement le premier résultat de recherche lors de la recherche de "chaîne de bits de tableau d'octets java" dans Google, je vais poster ma solution générale à ce problème pour les personnes atteintes d'énormes chaînes de caractères et/ou des tableaux d'octets.
Remarque que ma solution ci-dessous est la seule solution que j'ai couru qui passe tous mes cas de test -- de nombreuses solutions en ligne pour cette relativement simple problème ne fonctionnent tout simplement pas.
Code
Performance
Je m'ennuyais au travail alors j'ai fait quelques tests de performance de comparer par rapport à la accepté de répondre ici pour lorsque N est grand. (En feignant d'ignorer le fait que la BigInteger approche posté ci-dessus ne fonctionne même pas correctement comme une approche générale.)
C'est en cours d'exécution avec une chaîne de bits aléatoires de taille de 5M et un tableau d'octets aléatoires de taille 1M:
Et le code:
OriginalL'auteur Ryan