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é.