56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package biginthelper
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"math/rand"
 | 
						|
	"strconv"
 | 
						|
	"strings"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func Test_ParseBigInt(t *testing.T) {
 | 
						|
	fmt.Println(ParseBigInt(`231513`))
 | 
						|
	fmt.Println(ParseBigInt(`654wdf16`))
 | 
						|
	fmt.Println(ParseBigInt(`5455_1655`))
 | 
						|
	fmt.Println(ParseBigInt(``))
 | 
						|
	fmt.Println(ParseBigInt(`af`))
 | 
						|
}
 | 
						|
func Test_IntToHex(t *testing.T) {
 | 
						|
	fmt.Println(strings.TrimLeft(`01615`, "0"))
 | 
						|
	fmt.Println(strings.TrimLeft(`1615`, "0"))
 | 
						|
	fmt.Println(strings.TrimLeft(`0x1615`, "0"))
 | 
						|
}
 | 
						|
 | 
						|
// i := int64(32)
 | 
						|
// s := strconv.FormatInt(i, 16)
 | 
						|
// println(s)
 | 
						|
 | 
						|
// 对比strconv.FormatInt(i, 16)和fmt.Sprintf("0x%x", i)的性能消耗
 | 
						|
// go test -bench=_QE_ -benchmem
 | 
						|
// -benchtime 默认为1秒  -benchmem 获得内存分配的统计数据
 | 
						|
func Benchmark_QE_strconv(b *testing.B) {
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		strconv.FormatInt(getInt64(), 16)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Benchmark_QE_fmt(b *testing.B) {
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		fmt.Sprintf("0x%x", getInt64())
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func getInt64() int64 {
 | 
						|
	return int64(rand.Intn(10000))
 | 
						|
}
 | 
						|
 | 
						|
// 结果
 | 
						|
// Benchmark_QE_strconv-6          47142570                24.29 ns/op            5 B/op          1 allocs/op
 | 
						|
// Benchmark_QE_fmt-6              14787649                82.41 ns/op            8 B/op          1 allocs/op
 | 
						|
 | 
						|
// 改为随机数后
 | 
						|
// Benchmark_QE_strconv-6          27890760                42.48 ns/op            3 B/op          0 allocs/op
 | 
						|
// Benchmark_QE_fmt-6              10595380               108.6 ns/op            15 B/op          1 allocs/op
 | 
						|
 | 
						|
// 结论 尽量使用  strconv.FormatInt(i, 16) 进行16进制的转换
 |