温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

利用golang 怎么将[]byte转换成16进制

发布时间:2020-12-17 16:36:30 阅读:478 作者:Leah 栏目:开发技术
GO开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这期内容当中小编将会给大家带来有关利用golang 怎么将[]byte转换成16进制,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

将[]byte转成16进制

import "crypto/md5"
import "fmt"
sign := md5.Sum([]byte("date string"))
signStr := fmt.Sprintf("%x", sign) //将[]byte转成16进制

补充:golang []byte存储存储的16进制转10进制

项目中有用[]byte存储16进制需要转到10进制,如果用系统自带的函数处理,需要先将[]byte通过hex.EncodeToString转为string,再用strconv.ParseInt转到10进制,过程中由于两次转换导致内存分配过多(每秒执行近100w次),GC出现错误导致进程挂掉。

自己写了一个函数来转,主要是避免出现内存泄漏:

var b2m_map map[byte]uint64 = map[byte]uint64{
	0x000,
	0x011,
	0x022,
	0x033,
	0x044,
	0x055,
	0x066,
	0x077,
	0x088,
	0x099,
	0x0A10,
	0x0B11,
	0x0C12,
	0x0D13,
	0x0E14,
	0x0F15,
	0x1016,
	0x1117,
	0x1218,
	0x1319,
	0x1420,
	0x1521,
	0x1622,
	0x1723,
	0x1824,
	0x1925,
	0x1A26,
	0x1B27,
	0x1C28,
	0x1D29,
	0x1E30,
	0x1F31,
	0x2032,
	0x2133,
	0x2234,
	0x2335,
	0x2436,
	0x2537,
	0x2638,
	0x2739,
	0x2840,
	0x2941,
	0x2A42,
	0x2B43,
	0x2C44,
	0x2D45,
	0x2E46,
	0x2F47,
	0x3048,
	0x3149,
	0x3250,
	0x3351,
	0x3452,
	0x3553,
	0x3654,
	0x3755,
	0x3856,
	0x3957,
	0x3A58,
	0x3B59,
	0x3C60,
	0x3D61,
	0x3E62,
	0x3F63,
	0x4064,
	0x4165,
	0x4266,
	0x4367,
	0x4468,
	0x4569,
	0x4670,
	0x4771,
	0x4872,
	0x4973,
	0x4A74,
	0x4B75,
	0x4C76,
	0x4D77,
	0x4E78,
	0x4F79,
	0x5080,
	0x5181,
	0x5282,
	0x5383,
	0x5484,
	0x5585,
	0x5686,
	0x5787,
	0x5888,
	0x5989,
	0x5A90,
	0x5B91,
	0x5C92,
	0x5D93,
	0x5E94,
	0x5F95,
	0x6096,
	0x6197,
	0x6298,
	0x6399,
	0x64100,
	0x65101,
	0x66102,
	0x67103,
	0x68104,
	0x69105,
	0x6A106,
	0x6B107,
	0x6C108,
	0x6D109,
	0x6E110,
	0x6F111,
	0x70112,
	0x71113,
	0x72114,
	0x73115,
	0x74116,
	0x75117,
	0x76118,
	0x77119,
	0x78120,
	0x79121,
	0x7A122,
	0x7B123,
	0x7C124,
	0x7D125,
	0x7E126,
	0x7F127,
	0x80128,
	0x81129,
	0x82130,
	0x83131,
	0x84132,
	0x85133,
	0x86134,
	0x87135,
	0x88136,
	0x89137,
	0x8A138,
	0x8B139,
	0x8C140,
	0x8D141,
	0x8E142,
	0x8F143,
	0x90144,
	0x91145,
	0x92146,
	0x93147,
	0x94148,
	0x95149,
	0x96150,
	0x97151,
	0x98152,
	0x99153,
	0x9A154,
	0x9B155,
	0x9C156,
	0x9D157,
	0x9E158,
	0x9F159,
	0xA0160,
	0xA1161,
	0xA2162,
	0xA3163,
	0xA4164,
	0xA5165,
	0xA6166,
	0xA7167,
	0xA8168,
	0xA9169,
	0xAA170,
	0xAB171,
	0xAC172,
	0xAD173,
	0xAE174,
	0xAF175,
	0xB0176,
	0xB1177,
	0xB2178,
	0xB3179,
	0xB4180,
	0xB5181,
	0xB6182,
	0xB7183,
	0xB8184,
	0xB9185,
	0xBA186,
	0xBB187,
	0xBC188,
	0xBD189,
	0xBE190,
	0xBF191,
	0xC0192,
	0xC1193,
	0xC2194,
	0xC3195,
	0xC4196,
	0xC5197,
	0xC6198,
	0xC7199,
	0xC8200,
	0xC9201,
	0xCA202,
	0xCB203,
	0xCC204,
	0xCD205,
	0xCE206,
	0xCF207,
	0xD0208,
	0xD1209,
	0xD2210,
	0xD3211,
	0xD4212,
	0xD5213,
	0xD6214,
	0xD7215,
	0xD8216,
	0xD9217,
	0xDA218,
	0xDB219,
	0xDC220,
	0xDD221,
	0xDE222,
	0xDF223,
	0xE0224,
	0xE1225,
	0xE2226,
	0xE3227,
	0xE4228,
	0xE5229,
	0xE6230,
	0xE7231,
	0xE8232,
	0xE9233,
	0xEA234,
	0xEB235,
	0xEC236,
	0xED237,
	0xEE238,
	0xEF239,
	0xF0240,
	0xF1241,
	0xF2242,
	0xF3243,
	0xF4244,
	0xF5245,
	0xF6246,
	0xF7247,
	0xF8248,
	0xF9249,
	0xFA250,
	0xFB251,
	0xFC252,
	0xFD253,
	0xFE254,
	0xFF255,
}
func hex2int(hexB *[]byte) uint64 {
	var retInt uint64
	hexLen := len(*hexB)
	for k, v := range *hexB {
		retInt += b2m_map[v] * exponent(16uint64(2*(hexLen-k-1)))
	}
	return retInt
}
func exponent(a, n uint64) uint64 {
	result := uint64(1)
	for i := n; i > 0; i >>= 1 {
		if i&1 != 0 {
			result *= a
		}
		a *= a
	}
	return result
}

经过测试,性能和自带的方法接近,略有提升。

goos: windows
goarch: amd64
pkg: benchmark
Benchmark_General-4  	10000000	    144 ns/op
Benchmark_Better-4  	10000000	    128 ns/op
PASS
ok 	benchmark	3.086s

上述就是小编为大家分享的利用golang 怎么将[]byte转换成16进制了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×