Définissez les valeurs d'Octets en java
Je veux convertir la chaîne binaire de tableau d'octets dans java
. J'ai écrit le code pour chaque bit de l'octet tableau à partir de la chaîne binaire de String A = "1000000111010000"
private byte firstByte;
private byte secondByte;
byte xByte = new byte[2];
for(int i=0 ; i<A.length() ;i++){
if(i<8){
System.out.println(" i : "+i+" A.char[i] :"+A.charAt(i));
firstByte = (byte) (firstByte | (A.charAt(i) << i));
}else{
System.out.println(" i : "+i+" A.char[i] :"+A.charAt(i));
secondByte = (byte) (secondByte | (A.charAt(i) << i));
}
}
xByte[0] = firstByte;
xByte[1] = secondByte;
À écrire le code ci-dessus, j'ai pris l'aide de cette lien .
Mais la valeur stockés int la xByte[0]
et xByte[1]
n'est pas correct.
Il donne des valeurs comme
xByte[0] :-15
xByte[1] :0
Est que c'est la façon d'écrire?Merci de me suggérer la correction pour obtenir les bonnes valeurs d'octets.
System.out.println((int)A.charAt(i));
- A. charAt[i] permet de retourner un char, pas un nombre, et vous êtes réglage des bits d'une valeur char
- J'ai essayé avec
(int)A.charAt(i)
, mais il en résulte même. - voir ma réponse..
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas simplement jeter la
A.charAt(i)
à unint
. Il va retourner le code ASCII de la 1 et 0.Par conséquent, vous avez besoin de faire quelque chose de ce genre pour obtenir leur valeur numérique:-
Suffit d'utiliser BinaryCodec de Apache Commons:
Si vous voulez faire ce genre de conversion sur votre propre, votre code a besoin de quelques corrections.
Vous attendez que
A.charAt(i)
sera de retour numérique 0 ou 1, mais en fait revenirchar
'0' ou '1'. Le type de données char est un seul de caractères Unicode 16 bits avec une plage de nombres de 0 à 2^16, c'est les valeurs sont officiellement appelés les points de code.Pour imprimer la valeur de point de code vous avez besoin de jeter char, int:
Sortie de '0' et '1':
Opérateur "<< " convertit char des opérandes de type int, donc ce déplacement est de produire de mauvais résultats car:
est le même que
qui pour char " 0 " est le même que de changer de valeur de 48 à gauche:
Pour convertir char '0' ou '1' à 0 ou 1 valeur numérique utilisez le Caractère.getNumericValue(A. charAt(i)):
Aussi passer par valeur
i
est incorrect. Vous avez besoin de passer par(7-i)
pour le premier octet ou(7-i%8)
pour le deuxième octet. Lorsque l'indice dei
atteint 8 il a besoin pour commencer à compter à partir de 0, donci%8
Lors de l'impression des valeurs pour un octet de type, vous avez deux options: octet de valeur numérique ou une chaîne binaire de représentation:
de sortie:
Toute l'exemple corrigé:
1
est en fait le numéro 1. Il existe une méthode Personnage.getNumericValue() pour y accéder.A. charAt[i] permet de retourner un char, pas un nombre, et vous êtes réglage des bits d'une valeur char.
Au lieu d'utiliser