web-dev-qa-db-fra.com

Long/Int dans la chaîne scala to hex

Avec Integer.toString(1234567, 16).toUpperCase() // output: 12D68 pourrait aider à convertir une chaîne Int en chaîne hexadécimale.

Comment faire la même chose avec Long?

Long.toString(13690566117625, 16).toUpperCase() // but this will report error

10
mCY

Vous recherchez RichLong.toHexString :

scala> 13690566117625L.toHexString
res0: String = c73955488f9

Et la variante majuscule:

scala> 13690566117625L.toHexString.toUpperCase
res1: String = C73955488F9

Modifier

Ceci est également disponible pour Int via RichInt.toHexString :

scala> 42.toHexString
res4: String = 2a
13
Yuval Itzchakov
val bigNum: Long   = 13690566117625L
val bigHex: String = f"$bigNum%X"

Utilisez %X pour obtenir des lettres hexadécimales majuscules et %x si vous voulez des minuscules.

9
jwvh

Vous avez plusieurs erreurs. Tout d’abord, le nombre 13690566117625 est trop grand pour tenir dans une int et vous devez donc ajouter un préfixe L pour indiquer qu’il s’agit d’un littéral long. Deuxièmement, Long n'a pas de méthode toString qui prend une base (contrairement à Integer).

Solution:

val x = 13690566117625L
x.toHexString.toUpperCase
2
Jesper

J'ai trouvé que f"0x$int_val%08X" ou f"0x$long_val%16X" fonctionnait très bien lorsque vous souhaitez aligner une valeur sur des zéros non significatifs.

scala> val i = 1
i: Int = 1

scala> f"0x$i%08X"
res1: String = 0x00000001

scala> val i = -1
i: Int = -1

scala> f"0x$i%08X"
res2: String = 0xFFFFFFFF

scala> val i = -1L
i: Long = -1

scala> f"0x$i%16X"
res3: String = 0xFFFFFFFFFFFFFFFF
0
Martin Tapp