我想在Golang中从int转换为hex。 在strconv中,有一种方法可以将字符串转换为十六进制。是否有类似的方法从int获取十六进制字符串?
答案 0 :(得分:28)
"十六进制"不是一件真实的事。您可以使用数字的十六进制表示形式,但0xFF
和255
之间没有区别。有关can be found in the docs的更多信息,指出您可以使用0xff
来定义整数常量255
!如您所述,如果您尝试查找整数的十六进制表示,可以使用strconv
package main
import (
"fmt"
"strconv"
)
func main() {
fmt.Println(strconv.FormatInt(255, 16))
// gives "ff"
}
答案 1 :(得分:24)
由于十六进制是Integer literal,您可以使用fmt package和%x
或%X
向fmt.Sprintf()
询问该整数的字符串表示形式格式。
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)
输出:
Hex conv of '255' is 'ff'
HEX conv of '255' is 'FF'
答案 2 :(得分:10)
如果格式化某些字节,则十六进制需要2位数表示,前导为0。
例如:1 => '01',15 => '0f',等等。
可以强制Sprintf尊重这一点:
h:= fmt.Sprintf("%02x", 14)
fmt.Println(h) // 0e
h2:= fmt.Sprintf("%02x", 231)
fmt.Println(h2) // e7
模式“%02x”表示:
答案 3 :(得分:2)
Sprintf用途更广,但FormatInt更快。选择最适合您的东西
func Benchmark_sprintf(b *testing.B) { // 83.8 ns/op
for n := 0; n < b.N; n++ {
_ = fmt.Sprintf("%x", n)
}
}
func Benchmark_formatint(b *testing.B) { // 28.5 ns/op
bn := int64(b.N)
for n := int64(0); n < bn; n++ {
_ = strconv.FormatInt(n, 16)
}
}
答案 4 :(得分:1)
i := 4357640193405743614
h := fmt.Sprintf("%016x",i)
fmt.Printf("Decimal: %d,\nHexa: %s", i, h)
# Result
Decimal..: 4357640193405743614,
Hexa.....: 3c7972ab0ae9f1fe
答案 5 :(得分:0)
例如如果是uint32,则可以将其转换为十六进制,如下所示=>
var p uint32
p = 4278190335
r := p >> 24 & 0xFF
g := p >> 16 & 0xFF
b := p >> 8 & 0xFF
fmt.Println(r, g, b)//255 0 0
您也可以查看此在线工具以获取参考。 https://cryptii.com/pipes/integer-encoder