将[]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{ 0x00: 0, 0x01: 1, 0x02: 2, 0x03: 3, 0x04: 4, 0x05: 5, 0x06: 6, 0x07: 7, 0x08: 8, 0x09: 9, 0x0A: 10, 0x0B: 11, 0x0C: 12, 0x0D: 13, 0x0E: 14, 0x0F: 15, 0x10: 16, 0x11: 17, 0x12: 18, 0x13: 19, 0x14: 20, 0x15: 21, 0x16: 22, 0x17: 23, 0x18: 24, 0x19: 25, 0x1A: 26, 0x1B: 27, 0x1C: 28, 0x1D: 29, 0x1E: 30, 0x1F: 31, 0x20: 32, 0x21: 33, 0x22: 34, 0x23: 35, 0x24: 36, 0x25: 37, 0x26: 38, 0x27: 39, 0x28: 40, 0x29: 41, 0x2A: 42, 0x2B: 43, 0x2C: 44, 0x2D: 45, 0x2E: 46, 0x2F: 47, 0x30: 48, 0x31: 49, 0x32: 50, 0x33: 51, 0x34: 52, 0x35: 53, 0x36: 54, 0x37: 55, 0x38: 56, 0x39: 57, 0x3A: 58, 0x3B: 59, 0x3C: 60, 0x3D: 61, 0x3E: 62, 0x3F: 63, 0x40: 64, 0x41: 65, 0x42: 66, 0x43: 67, 0x44: 68, 0x45: 69, 0x46: 70, 0x47: 71, 0x48: 72, 0x49: 73, 0x4A: 74, 0x4B: 75, 0x4C: 76, 0x4D: 77, 0x4E: 78, 0x4F: 79, 0x50: 80, 0x51: 81, 0x52: 82, 0x53: 83, 0x54: 84, 0x55: 85, 0x56: 86, 0x57: 87, 0x58: 88, 0x59: 89, 0x5A: 90, 0x5B: 91, 0x5C: 92, 0x5D: 93, 0x5E: 94, 0x5F: 95, 0x60: 96, 0x61: 97, 0x62: 98, 0x63: 99, 0x64: 100, 0x65: 101, 0x66: 102, 0x67: 103, 0x68: 104, 0x69: 105, 0x6A: 106, 0x6B: 107, 0x6C: 108, 0x6D: 109, 0x6E: 110, 0x6F: 111, 0x70: 112, 0x71: 113, 0x72: 114, 0x73: 115, 0x74: 116, 0x75: 117, 0x76: 118, 0x77: 119, 0x78: 120, 0x79: 121, 0x7A: 122, 0x7B: 123, 0x7C: 124, 0x7D: 125, 0x7E: 126, 0x7F: 127, 0x80: 128, 0x81: 129, 0x82: 130, 0x83: 131, 0x84: 132, 0x85: 133, 0x86: 134, 0x87: 135, 0x88: 136, 0x89: 137, 0x8A: 138, 0x8B: 139, 0x8C: 140, 0x8D: 141, 0x8E: 142, 0x8F: 143, 0x90: 144, 0x91: 145, 0x92: 146, 0x93: 147, 0x94: 148, 0x95: 149, 0x96: 150, 0x97: 151, 0x98: 152, 0x99: 153, 0x9A: 154, 0x9B: 155, 0x9C: 156, 0x9D: 157, 0x9E: 158, 0x9F: 159, 0xA0: 160, 0xA1: 161, 0xA2: 162, 0xA3: 163, 0xA4: 164, 0xA5: 165, 0xA6: 166, 0xA7: 167, 0xA8: 168, 0xA9: 169, 0xAA: 170, 0xAB: 171, 0xAC: 172, 0xAD: 173, 0xAE: 174, 0xAF: 175, 0xB0: 176, 0xB1: 177, 0xB2: 178, 0xB3: 179, 0xB4: 180, 0xB5: 181, 0xB6: 182, 0xB7: 183, 0xB8: 184, 0xB9: 185, 0xBA: 186, 0xBB: 187, 0xBC: 188, 0xBD: 189, 0xBE: 190, 0xBF: 191, 0xC0: 192, 0xC1: 193, 0xC2: 194, 0xC3: 195, 0xC4: 196, 0xC5: 197, 0xC6: 198, 0xC7: 199, 0xC8: 200, 0xC9: 201, 0xCA: 202, 0xCB: 203, 0xCC: 204, 0xCD: 205, 0xCE: 206, 0xCF: 207, 0xD0: 208, 0xD1: 209, 0xD2: 210, 0xD3: 211, 0xD4: 212, 0xD5: 213, 0xD6: 214, 0xD7: 215, 0xD8: 216, 0xD9: 217, 0xDA: 218, 0xDB: 219, 0xDC: 220, 0xDD: 221, 0xDE: 222, 0xDF: 223, 0xE0: 224, 0xE1: 225, 0xE2: 226, 0xE3: 227, 0xE4: 228, 0xE5: 229, 0xE6: 230, 0xE7: 231, 0xE8: 232, 0xE9: 233, 0xEA: 234, 0xEB: 235, 0xEC: 236, 0xED: 237, 0xEE: 238, 0xEF: 239, 0xF0: 240, 0xF1: 241, 0xF2: 242, 0xF3: 243, 0xF4: 244, 0xF5: 245, 0xF6: 246, 0xF7: 247, 0xF8: 248, 0xF9: 249, 0xFA: 250, 0xFB: 251, 0xFC: 252, 0xFD: 253, 0xFE: 254, 0xFF: 255, } func hex2int(hexB *[]byte) uint64 { var retInt uint64 hexLen := len(*hexB) for k, v := range *hexB { retInt += b2m_map[v] * exponent(16, uint64(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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。