Voglio convertire da int a esadecimale in Golang. In strconv, c'è un metodo che converte stringhe in esadecimale. C'è un metodo simile per ottenere una stringa esadecimale da un int?Come posso convertire da int a hex in Golang?
risposta
Dal momento che esadecimale è un Integer literal, si può chiedere al fmt package per una rappresentazione di stringa che intero, utilizzando fmt.Sprintf()
e il formato %x
o %X
.
See playground
i := 255
h := fmt.Sprintf("%x", i)
fmt.Printf("Hex conv of '%d' is '%s'\n", i, h)
h = fmt.Sprintf("%X", i)
fmt.Printf("HEX conv of '%d' is '%s'\n", i, h)
uscita:
Hex conv of '255' is 'ff'
HEX conv of '255' is 'FF'
"Hex" non è una cosa reale. È possibile utilizzare una rappresentazione esadecimale di un numero, ma non c'è differenza tra 0xFF
e 255
. Maggiori informazioni su quello can be found in the docs che evidenziano che è possibile utilizzare 0xff
per definire una costante intera 255
! Come si parla, se si sta cercando di trovare la rappresentazione esadecimale di un numero intero è possibile utilizzare strconv
package main
import (
"fmt"
"strconv"
)
func main() {
fmt.Println(strconv.FormatInt(255, 16))
// gives "ff"
}
Se la formattazione alcuni byte, esagono necessaria una rappresentazione 2 cifre, con i principali 0.
Per Esempio: 1 => '01', 15 => '0f', ecc.
È possibile forzare Sprintf a rispettare questo:
h:= fmt.Sprintf("%02x", 14)
fmt.Println(h) // 0e
h2:= fmt.Sprintf("%02x", 231)
fmt.Println(h2) // e7
Il pattern "% 02x" significa:
- '0' forza utilizzando zeri
- '2' impostare il formato di uscita come due charactes
- 'x' per convertire in esadecimale