[java] Conversion de l'octet codé US-ASCII en entier et retour



Answers

Voici une pensée sur la façon d'utiliser des opérations rapides comme le décalage d'octets et l'arithmétique décimale pour accélérer cela. En supposant que vous avez le code actuel:

byte[] token;  // bytes representing a bunch of ascii numbers
int n = Integer.parseInt(new String(token));  // current approach

Vous pouvez alors remplacer cette dernière ligne et faire ce qui suit (en supposant qu'il n'y ait pas de nombres négatifs, pas de caractères de langauge étrangers, etc.):

int n = 0;
for (byte b : token)
  n = 10*n + (b-'0');

Par souci d'intérêt, cela a entraîné environ 28% d'accélération pour moi sur un énorme ensemble de données. Je pense que cela est dû à ne pas avoir à allouer de nouveaux objets String , puis les parseInt après chaque appel parseInt .

Question

J'ai un tableau d'octets qui peut être de taille 2,3 ou 4. J'ai besoin de convertir cela en la valeur entière correcte. J'ai aussi besoin de faire cela en inverse, c'est-à-dire un entier de 2,3 ou 4 caractères pour un tableau d'octets.

Par exemple, les octets hexadécimaux bruts sont: 54 et 49. La valeur US-ASCII de la chaîne décodée est 61. La réponse entière doit donc être 61.

J'ai lu toutes les questions de conversion sur etc que j'ai pu trouver, mais ils donnent tous la réponse complètement fausse, je ne sais pas si cela pourrait être l'encodage?

Si je fais new String(lne,"US-ASCII") , où lne est mon tableau d'octets, j'obtiens le bon 61. Mais en faisant cela ((int)lne[0] << 8) | ((int)lne[1] & 0xFF) ((int)lne[0] << 8) | ((int)lne[1] & 0xFF) , je reçois la mauvaise réponse complète.

Cela peut être une erreur stupide ou je ne comprends pas complètement les schémas de représentation de nombre dans Java et l'idée de codage / décodage.

Toute aide serait appréciée.

NOTE: Je sais que je peux simplement analyser la chaîne en nombre entier, mais j'aimerais savoir s'il existe un moyen d'utiliser des opérations rapides comme le décalage et l'arithmétique binaire à la place?






Links



Tags

java java   byte   int