英文:
Big number to HEX in golang
问题
我正在尝试将大数(big.Int
或者更好的 big.Rat
)转换为十六进制值。
当数字为负数时,我总是遇到转换问题,特别是像负数 0xff..xx 或者固定数。
有没有一种方法可以解决这个问题?
英文:
I'm trying to convert big numbers (big.Int
or even better big.Rat
) to hex values.
I'm always having issue converting number when they are negative 0xff..xx or Fixed numbers.
Is there a way to do that?
答案1
得分: 14
不确定你遇到了什么问题,但是big.Int
、big.Float
和big.Rat
实现了fmt.Formatter
接口,你可以使用printf系列函数和**%x** %X将其转换为十六进制字符串表示,例如:
package main
import (
"fmt"
"math/big"
)
func toHexInt(n *big.Int) string {
return fmt.Sprintf("%x", n) // 或者 %x 或者大写的%X
}
func toHexRat(n *big.Rat) string {
return fmt.Sprintf("%x", n) // 或者 %x 或者大写的%X
}
func main() {
a := big.NewInt(-59)
b := big.NewInt(59)
fmt.Printf("负整数小写:%x\n", a)
fmt.Printf("负整数大写:%X\n", a) // %X 表示大写
fmt.Println("使用Int函数:", toHexInt(b))
f := big.NewRat(3, 4) // 分数:3/4
fmt.Printf("有理数小写:%x\n", f)
fmt.Printf("有理数大写:%X\n", f)
fmt.Println("使用Rat函数:", toHexRat(f))
}
链接:https://play.golang.org/p/BVh7wAYfbF
英文:
Not sure what kind of issues are you having, but big.Int, big.Float and big.Rat implement the fmt.Formatter
interface, you can use the printf family with the %x %X to convert to hexadecimal string representation, example:
package main
import (
"fmt"
"math/big"
)
func toHexInt(n *big.Int) string {
return fmt.Sprintf("%x", n) // or %x or upper case
}
func toHexRat(n *big.Rat) string {
return fmt.Sprintf("%x", n) // or %x or upper case
}
func main() {
a := big.NewInt(-59)
b := big.NewInt(59)
fmt.Printf("negative int lower case: %x\n", a)
fmt.Printf("negative int upper case: %X\n", a) // %X for upper case
fmt.Println("using Int function:", toHexInt(b))
f := big.NewRat(3, 4) // fraction: 3/4
fmt.Printf("rational lower case: %x\n", f)
fmt.Printf("rational lower case: %X\n", f)
fmt.Println("using Rat function:", toHexRat(f))
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论