J'ai besoin de convertir un octet en une matrice de 4 booléens en Java. Comment puis-je y aller? P>
3 Réponses :
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: Les valeurs hexadécimales ( 0x01 code>,
0x02 code>, 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 (
& code>), 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. P> P>
D'autres augmente un très valide em> point: en Java, Quelle que soit la cartographie, mais , il est peu probable que Le code ci-dessus utilise la technique de sondage binaire standard pour convertir un octet code> sur un L'exemple montre également comment effectuer une opération d'exécution éventuellement une autre structure de données applicable est un byte.size == 8 code>
. C'est-à-dire qu'il y a 8 bits dans un octet code> code>. Vous devez définir comment vous souhaitez cartographier 8 bits dans 4 Boolean code> valeurs; Sinon, nous ne pouvons que deviner qu'est-ce que c'est que vous essayez de faire. p>
sur
bitset code> h3>
boolean [] code> est vraiment la meilleure représentation.
java.util.bitset code>
peut être mieux. Voici un exemple: p> bitset code>. Notez qu'un ensemble
(octet) 10 code> a ses bits 1 et 3 définis (c.-à-d.
10 = 2 ^ 1 + 2 ^ 3 code> où
^ code> dénote l'exponentiation ). p>
ou CODE> / SET UNION sur
Bitset code>. P>
sur
Enumset code> h3>
Enumset code>
, qui est un définir code>
mise en œuvre hautement optimisé pour Enum code>. Voici un exemple: p>
Voir aussi h3>
Enumset code> au lieu des champs de bits em> li>
ul> h3>
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; }
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é.