Mon composant reçoit une valeur longue que j'utiliserai plus tard comme clé dans un cache. La clé elle-même est une représentation sous forme de chaîne de la valeur longue comme si elle était une valeur 64 bits non signée. C'est-à-dire, quand mon composant est remis -2944827264075010823L, j'ai besoin de convertir cela en la clé de chaîne "15501916809634540793".Comment créer une chaîne représentant un Java long comme s'il était non signé Valeur 64 bits
J'ai une solution, mais il semble que la force brute et cela me rend un peu mal à l'aise. Essentiellement, je convertir long en une représentation de chaîne hexadécimale (si -2944827264075010823L devient « d721df34a7ec6cf9 ») et convertir la chaîne hexadécimale en BigInteger:
String longValueAsHexString = convertLongToHexString(longValue);
BigInteger bi = new BigInteger(longValueAsHexString, 16);
String longValueString = bi.toString();
J'utilise ensuite longValueString comme la clé dans le cache.
Je ne peux pas utiliser Long.toString (longValue, 16), car il renvoie la chaîne hexadécimale pour la valeur absolue, précédée d'un "-".
Alors mon convertLongToHexString ressemble à ceci:
long mask = 0x00000000ffffffffL;
long bottomHalf = number & mask;
long upperHalf = (number >> 32) & mask;
String bottomHalfString = Long.toString(bottomHalf, 16);
if (bottomHalfString.length() != 8) {
String zeroes = "0000000000000000";
bottomHalfString = zeroes.substring(16-bottomHalfString.length()) + bottomHalfString;
}
return Long.toString(upperHalf,16)+bottomHalfString;
Il doit y avoir une façon plus élégante de le faire. Aucune suggestion?
Vous pouvez utiliser Long.toHexString() au lieu de votre convertLongToHexString –