Convertir bitstring d'octets en java
J'ai besoin de configurer chaque bit 1 byte en Java.
bit7 - 1,
bit6 - 1,
bit5 - 1,
bit4 - 0,
bit3 – 0,
bit2 – 0,
bit1 – 0,
bit0 – 0
J'ai écrit:
byte extra_dop = 0b00000111;
mais j'ai reçu le message d'erreur suivant:
binaire littéraux ne sont pas pris en charge à la source de 1,5 (7 source ou
plus de permettre binaire littéraux)
avez-vous essayé
Bien que la version de Java que vous utilisez, et est à l'aide de Java 7 une option?
byte extra_dop = 0111b;
?Bien que la version de Java que vous utilisez, et est à l'aide de Java 7 une option?
OriginalL'auteur user2656572 | 2013-12-11
Vous devez vous connecter pour publier un commentaire.
Binaire littérale ont été introduites dans Java7.
Utilisation suivantes pour les anciennes version:
parseByte
au lieu devalueOf
.Avec l'autoboxing jamais remarqué de différence. Merci pour le tuyau, mise à jour de réponse.
Byte.parseByte("11111111", 2);
-> java.lang.NumberFormatException: Valeur hors de la plageOriginalL'auteur Amit G
Que le message d'erreur dit, la
0b...
syntaxe n'existe pas encore dans Java 5 (qui est ce que vous semblez être l'aide); il a été présenté avec Java 7. Si vous êtes à l'aide de Java 7, assurez-vous que vos paramètres de compilation (dans votre IDE ou fichier compressé) sont configurés de sorte qu'il accepte de Java 7 syntaxe.Bits sont normalement compté à partir de la droite vers la gauche, donc si vous dites le bit 7 est à 1, le bit 6 est 1, etc. alors je m'attends à le nombre binaire à
11100000
au lieu de00000111
.À écrire ceci dans le code source en Java version antérieure à la version Java 7, il vous suffit d'écrire comme un nombre décimal ou hexadécimal:
Vous pouvez également utiliser
Integer.parseInt()
avec radix 2:(Remarque, vous pouvez également utiliser
Byte.parseByte
mais il n'accepte pas11100000
car il dépasse la plage de l'signébyte
type).OriginalL'auteur Jesper
ce n'est pas la façon de faire les choses en Java. Jetez un oeil à laBitSet
la classe, c'est un moyen beaucoup plus pratique de fixer des indicateurs de bits.Hmpfh. Permettez-moi de reformuler ce que. Java est un langage Orienté Objet où il y a efficace et Orientée Objet de façons de faire les choses dans une plus abordable pour les développeurs façon qu'avec peu d'opérateurs. Je vous suggérons d'utiliser
BitSet
, car il rend votre code plus lisible, et il peut supporter beaucoup plus de drapeaux qu'un simple masque de bits. Mieux?BitSet
est une option, à l'aide d'un seulbyte
valeur est parfaitement légitime option trop.Je suis d'accord qu'il est techniquement valable, mais "Effective Java Article 47: Connaître et utiliser les bibliothèques", indique que je dois utiliser les solutions existantes plutôt que de réinventer.
Ça dépend du contexte. Parfois, il est approprié d'utiliser
BitSet
, d'autres fois il ne l'est pas. Sachant que les bibliothèques existent vous permet de prendre cette décision. Supposons que nous sommes de stockage d'un million d'entrées comme celle - ci, la création d'un million d'BitSet
objets peuvent être extrêmement cher par rapport à la simple création d'un million d'-tableau d'octets. L'OP apparemment ne veut stocker 8 drapeaux, de sorte que le "il peut prendre en charge plus de drapeaux" n'est pas un avantage dans ce cas. Je pense qu'il est raisonnable de penser la recherche en elle - mais je l'ai fait que sur un commentaire plutôt qu'une réponse.OriginalL'auteur Sean Patrick Floyd
Cela dépend de ce que vous voulez accomplir. Si vous voulez juste pour affecter une valeur à ne pas être binaire changé, ce que vous faites est très bien, mais pour utiliser cette fonctionnalité, vous devrez le compiler en précisant que javac recevrez un code source qui est conforme avec java 7 (c'est ce que les messages d'erreur, c'est dire). Pour ce faire dépend de la façon dont vous êtes à la compilation, si vous êtes à l'aide de Netbeans ou Eclipse alors vous ferez ce sur le projet de configuration des propriétés (clic droit sur le projet et rechercher les propriétés, il va ouvrir une boîte de dialogue, je ne me souviens pas en ce moment où la compatibilité du code source est dans chaque IDE, mais je suis presque sûr que c'est droit dans l'écran principal de la boîte de dialogue).
Toutefois, si vous souhaitez modifier le numéro de la suite en utilisant les opérations sur les bits, alors vous aurez besoin de travailler comme @Sean a dit à l'aide de BitSet (en fait, vous pouvez également utiliser les opérations sur les bits directement sur les nombres comme nous le faisons en C/C++, il n'est tout simplement pas à l'aise, mais possible).
OriginalL'auteur prmottajr