8
votes

Convertir un octet en une gamme booléenne de longueur 4 en Java

J'ai besoin de convertir un octet en une matrice de 4 booléens en Java. Comment puis-je y aller?


3 commentaires

Comment imaginez-vous cette conversion? Un octet contient huit bits. Voulez-vous utiliser quatre et jeter quatre heures?


Il y a huit bits dans un octet. Par conséquent, vous ne pouvez pas faire cela à moins que la valeur des octets soit garantie inférieure à B1111. Est-ce une hypothèse juste à faire?


Stackoverflow.com/questions/ 1034473 / ... une réponse qui vous donne presque tout ce que vous êtes après, si vous savez quels bits vous êtes intéressé.


3 Réponses :


12
votes

Commentaire de Michael Patrotta sur votre question, vous devez décider quels bits dans l'octet 8 bits devraient être testés pour la matrice booléenne résultante. À des fins de démonstration, supposons que vous souhaitiez que les quatre bits les plus à droite, alors quelque chose comme ça devrait fonctionner: xxx

Les valeurs hexadécimales ( 0x01 , 0x02 , etc.) Dans cet exemple sont des masques de bits spéciaux qui n'ont qu'un seul bit défini à l'emplacement souhaité; SO 0x01 n'a que le jeu le plus à droite, 0x08 n'a que le quatrième jeu de bit à droite. En testant l'octet donné contre ces valeurs avec l'opérateur et l'opérateur ( & ), vous obtiendrez cette valeur si le bit est défini ou zéro sinon. Si vous souhaitez vérifier différents bits, autrement que les quatre à droite, vous devrez créer différents bitmasks.


0 commentaires

5
votes

sur la spécification

D'autres augmente un très valide point: en Java, byte.size == 8 . C'est-à-dire qu'il y a 8 bits dans un octet . Vous devez définir comment vous souhaitez cartographier 8 bits dans 4 Boolean valeurs; Sinon, nous ne pouvons que deviner qu'est-ce que c'est que vous essayez de faire.

sur bitset

Quelle que soit la cartographie, mais , il est peu probable que boolean [] est vraiment la meilleure représentation. java.util.bitset peut être mieux. Voici un exemple: xxx

Le code ci-dessus utilise la technique de sondage binaire standard pour convertir un octet sur un bitset . Notez qu'un ensemble (octet) 10 a ses bits 1 et 3 définis (c.-à-d. 10 = 2 ^ 1 + 2 ^ 3 ^ dénote l'exponentiation ).

L'exemple montre également comment effectuer une opération d'exécution ou / SET UNION sur Bitset .


sur Enumset

éventuellement une autre structure de données applicable est un Enumset , qui est un définir mise en œuvre hautement optimisé pour Enum . Voici un exemple: xxx

Voir aussi
  • Efficace Java 2nd édition, élément 32: Utiliser Enumset au lieu des champs de bits


0 commentaires

0
votes

comme un addendum à la réponse de Maerics, c'est ainsi que vous pouvez convertir le tableau BOOL dans un octet, si nécessaire:

public static byte byteFromBooleanArray(bool[] _boolArray)
    {
        byte x = 0;
        x += _boolArray[0] ? (byte)1 : (byte)0;
        x += _boolArray[1] ? (byte)2 : (byte)0;
        x += _boolArray[2] ? (byte)4 : (byte)0;
        x += _boolArray[3] ? (byte)8 : (byte)0;

        return x;
    }


0 commentaires