La conversion à partir de l'octet de type int en java
J'ai généré une sécurité de nombres aléatoires, et mettre sa valeur dans un octet. Voici mon code.
SecureRandom ranGen = new SecureRandom();
byte[] rno = new byte[4];
ranGen.nextBytes(rno);
int i = rno[0].intValue();
Mais j'obtiens une erreur :
byte cannot be dereferenced
- Quelle erreur avez-vous ?
- Il y a une différence entre byte et Octet. Ce dernier est un objet, qui serait en charge de la
.intValue()
méthode. Le premier est le nombre d'octets brut de valeur et juste de l'attribuer commeint i = rno[0];
- Voir aussi stackoverflow.com/questions/2383265/convert-4-bytes-to-int
Vous devez vous connecter pour publier un commentaire.
Votre tableau est de
byte
primitives, mais que vous essayez d'appeler une méthode sur eux.Vous n'avez pas besoin de faire quelque chose explicite pour convertir un
byte
à unint
, juste:...car il n'est pas abattu.
Noter que le comportement par défaut de
byte
-à-int
de conversion est de préserver le signe de la valeur (rappelez-vousbyte
est un type signé en Java). Ainsi, par exemple:Si vous avez pensé de la
byte
non signés (156) plutôt que de signé (-100), pour obtenir l'équivalent de la valeur dans leint
vous auriez besoin de masquer le signe de bits:Juste pour être complet, #1: Si vous ne souhaitez utiliser les différentes méthodes de
Byte
pour une raison quelconque (vous n'avez pas besoin d'ici), vous pouvez utiliser un boxe de conversion:Ou la
Byte
constructeur:Mais encore une fois, vous n'avez pas besoin de ça ici.
Juste pour être complet, #2: Si c' ont été un abattu (par exemple, si vous essayez de convertir un
int
à unbyte
), tous vous avez besoin est un plâtre:Ceci assure le compilateur que vous savez que c'est d'un triste, donc vous n'avez pas la possibilité "d'une perte de précision" erreur.
Byte b = rno[0];
à la place.Byte.valueOf
, pasnew Byte()
, pour éviter d'allouer une nouvelle instance s'il en existe déjà un pour que la valeur d'un octet; plus d'infos ici. (Les specs n'est pas réellement dire qu', mais qu'est ce qu'elle fait. Vous pouvez dire en regardant le bytecode.)La plupart du temps, v2 est la façon dont vous avez réellement besoin.
& 0xff
est une source de bugs en Java.si vous souhaitez combiner les 4 octets en un seul int ce que vous devez faire
J'utilise 3 opérateurs spéciaux
|
est l'logiques bit à bit OU&
est logique, et<<
est le décalage à gaucheen essence je combiner les 4 octets de 8 bits en un seul 32 bits int en déplaçant les octets en place et le joint torique ensemble
J'ai aussi assurer un signe de promotion n'affectera pas le résultat avec
& 0xff
Types de données primitifs (comme octet) n'ont pas de méthodes en java, mais vous pouvez directement faire:
Byte.intValue
, tandis queByte
est une classe,byte
est un type de données primitif.(b & 0xff)
pour convertir unbyte
àint
, pas((int) b)
ou l'équivalent implicite fonte,int i = b;
, en raison de l'extension du signe de la haute-peu-ensemble d'octets. L'oubli de ce qui est une source commune de bugs.Octets sont convertie à ints.
Juste dire
J'ai pensé qu'il serait: