Go 如何将int转换为hex

Go 如何将int转换为hex,go,casting,Go,Casting,我想在Golang中将int转换为hex。 在strconv中,有一个将字符串转换为十六进制的方法。有没有类似的方法可以从int中获取十六进制字符串?“hex”不是真的。您可以使用数字的十六进制表示,但是0xFF和255之间没有区别。更多信息指出,您可以使用0xff定义整数常量255!正如您所提到的,如果您试图找到整数的十六进制表示形式,您可以使用strconv package main import ( "fmt" "strconv" ) func main() {

我想在Golang中将int转换为hex。 在strconv中,有一个将字符串转换为十六进制的方法。有没有类似的方法可以从int中获取十六进制字符串?

“hex”不是真的。您可以使用数字的十六进制表示,但是
0xFF
255
之间没有区别。更多信息指出,您可以使用
0xff
定义整数常量
255
!正如您所提到的,如果您试图找到整数的十六进制表示形式,您可以使用
strconv

package main

import (
    "fmt"
    "strconv"
)

func main() {
    fmt.Println(strconv.FormatInt(255, 16))
    // gives "ff"
}

由于十六进制是一个,您可以使用和
%x
%x
格式要求该整数的字符串表示形式。

输出:

Hex conv of '255' is 'ff'
HEX conv of '255' is 'FF'

如果格式化某些字节,十六进制需要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”表示:

  • “0”强制使用零
  • “2”将输出大小设置为两个字符
  • “x”转换为十六进制

例如,如果它是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


您还可以查看此在线工具的参考资料。

Sprintf更通用,但Formatt更快。选择对你更好的

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)
    }
}
func Benchmark_sprintf(b*testing.b){//83.8 ns/op
对于n:=0;n

游乐场:

但此解决方案不支持前导零,不是吗?很遗憾,因为它非常简单。你是对的,但关于这个(四年前的问题)的其他解决方案确实支持前导零
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)
    }
}
i := 4357640193405743614
h := fmt.Sprintf("%016x",i)
fmt.Printf("Decimal: %d,\nHexa: %s", i, h)

# Result
Decimal..: 4357640193405743614,
Hexa.....: 3c7972ab0ae9f1fe