In PHP (et in Perl, où PHP copié à partir de), unpack("N*", ...)
prend une chaîne (ce qui représente en fait une séquence d'octets) et analyse chaque segment de 4 octets de celui-ci en tant que signé gros-boutiste (» N 32 bits etwork byte order ") entier, les renvoyant dans un tableau.
Il y a plusieurs façons de faire la même chose en Java, mais d'une façon serait d'envelopper le tableau d'octets d'entrée dans un java.nio.ByteBuffer
, le convertir en un IntBuffer
puis lire les nombres entiers de ce qui suit:
public static int[] unpackNStar (byte[] bytes) {
// first, wrap the input array in a ByteBuffer:
ByteBuffer byteBuf = ByteBuffer.wrap(bytes);
// then turn it into an IntBuffer, using big-endian ("Network") byte order:
byteBuf.order(ByteOrder.BIG_ENDIAN);
IntBuffer intBuf = byteBuf.asIntBuffer();
// finally, dump the contents of the IntBuffer into an array
int[] integers = new int[ intBuf.remaining() ];
intBuf.get(integers);
return integers;
}
Bien sûr, si vous voulez juste itérer sur les entiers, vous n'avez pas vraiment besoin de la IntBuffer
ou le tableau:
ByteBuffer buf = ButeBuffer.wrap(bytes);
buf.order(ByteOrder.BIG_ENDIAN);
while (buf.hasRemaining()) {
int num = buf.getInt();
// do something with num...
}
En fait, itérer sur une ByteBuffer
comme celui-ci est un moyen pratique d'imiter le beh avior d'exemples encore plus compliqués de unpack()
en Perl ou PHP.
(Disclaimer: Je n'ai pas testé ce code, je crois qu'il devrait fonctionner, mais il est toujours possible que je l'ai mal compris quelque chose ou mal orthographié S'il vous plaît tester avant d'utiliser...)
Ps. Si vous lisez les octets d'un flux d'entrée, vous pouvez également l'inclure dans un DataInputStream
et utiliser sa méthode readInt()
. Bien sûr, il est également possible d'utiliser un ByteArrayInputStream
pour lire l'entrée d'un tableau d'octets, obtenant les mêmes résultats que les exemples ByteBuffer
ci-dessus.
Ce n'est pas une façon productive de poser des questions. Veuillez indiquer le problème que vous tentez de résoudre en premier, puis demandez s'il y a quelque chose comme un déballage qui pourrait être utilisé pour le résoudre. – Danack
le problème, Monsieur, était que j'essaie de comprendre l'API MEGA. Un monsieur très utile a expliqué et mis en œuvre la même chose en PHP [link] http://julien-marchand.fr/blog/using-the-mega-api-with-php-examples. J'utilisais cette info. pour comprendre l'API et la convertir en JAVA afin de faire une application Android! S'il vous plaît aider si vous êtes maintenant clair sur le problème! : D –
J'ai regardé le code auquel vous étiez lié, et je ne suis pas vraiment sûr pourquoi il a même besoin de convertir entre les tableaux d'octets (= chaînes en PHP) et les tableaux int. En fait, je soupçonne que ce n'est pas le cas, du moins pas tout le temps comme c'est le cas actuellement. Pourtant, si vous avez besoin de le faire pour une raison quelconque, voir ma réponse ci-dessous. –