如何在Golang中从int转换为十六进制?

时间:2015-11-07 09:59:44

标签: go casting

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

6 个答案:

答案 0 :(得分:28)

"十六进制"不是一件真实的事。您可以使用数字的十六进制表示形式,但0xFF255之间没有区别。有关can be found in the docs的更多信息,指出您可以使用0xff来定义整数常量255!如您所述,如果您尝试查找整数的十六进制表示,可以使用strconv

package main

import (
    "fmt"
    "strconv"
)

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

Try it in the playground

答案 1 :(得分:24)

由于十六进制是Integer literal,您可以使用fmt package%x%Xfmt.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”表示:

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

答案 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

游乐场:https://play.golang.org/p/ndlMyBdQjmT

答案 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

DEMO

您也可以查看此在线工具以获取参考。 https://cryptii.com/pipes/integer-encoder