欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

golang 將[]byte轉(zhuǎn)成16進(jìn)制的實現(xiàn)

 更新時間:2020年12月17日 11:22:07   作者:-緣故-  
這篇文章主要介紹了golang 將[]byte轉(zhuǎn)成16進(jìn)制的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

將[]byte轉(zhuǎn)成16進(jìn)制

import "crypto/md5"
import "fmt"
sign := md5.Sum([]byte("date string"))
signStr := fmt.Sprintf("%x", sign) //將[]byte轉(zhuǎn)成16進(jìn)制

補(bǔ)充:golang []byte存儲存儲的16進(jìn)制轉(zhuǎn)10進(jìn)制

項目中有用[]byte存儲16進(jìn)制需要轉(zhuǎn)到10進(jìn)制,如果用系統(tǒng)自帶的函數(shù)處理,需要先將[]byte通過hex.EncodeToString轉(zhuǎn)為string,再用strconv.ParseInt轉(zhuǎn)到10進(jìn)制,過程中由于兩次轉(zhuǎn)換導(dǎo)致內(nèi)存分配過多(每秒執(zhí)行近100w次),GC出現(xiàn)錯誤導(dǎo)致進(jìn)程掛掉。

自己寫了一個函數(shù)來轉(zhuǎn),主要是避免出現(xiàn)內(nèi)存泄漏:

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
}

經(jīng)過測試,性能和自帶的方法接近,略有提升。

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • 如何使用Goland IDE go mod 方式構(gòu)建項目

    如何使用Goland IDE go mod 方式構(gòu)建項目

    這篇文章主要介紹了如何使用Goland IDE go mod 方式構(gòu)建項目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • 深入了解Go語言中database/sql是如何設(shè)計的

    深入了解Go語言中database/sql是如何設(shè)計的

    在?Go?語言中內(nèi)置了?database/sql?包,它只對外暴露了一套統(tǒng)一的編程接口,便可以操作不同數(shù)據(jù)庫,那么database/sql?是如何設(shè)計的呢,下面就來和大家簡單聊聊吧
    2023-07-07
  • golang?gorm更新日志執(zhí)行SQL示例詳解

    golang?gorm更新日志執(zhí)行SQL示例詳解

    這篇文章主要為大家介紹了golang?gorm更新日志執(zhí)行SQL示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • go語言fasthttp使用實例小結(jié)

    go語言fasthttp使用實例小結(jié)

    fasthttp?是一個使用?Go?語言開發(fā)的?HTTP?包,主打高性能,針對?HTTP?請求響應(yīng)流程中的?hot?path?代碼進(jìn)行了優(yōu)化,下面我們就來介紹go語言fasthttp使用實例小結(jié),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • 詳解Go語言中的內(nèi)存對齊

    詳解Go語言中的內(nèi)存對齊

    前面我們學(xué)習(xí)了Go語言空結(jié)構(gòu)體詳解,最近又在看unsafe包的知識,在查閱相關(guān)資料時不免會看到內(nèi)存對齊相關(guān)的內(nèi)容。雖然不會,但可以學(xué)呀,那么這篇文章,我們就一起來看下什么是內(nèi)存對齊吧
    2022-10-10
  • 使用Golang開發(fā)一個簡易版shell

    使用Golang開發(fā)一個簡易版shell

    這篇文章主要為大家詳細(xì)介紹了如何使用Golang開發(fā)一個簡易版shell,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Go語言使用對稱加密的示例詳解

    Go語言使用對稱加密的示例詳解

    在項目開發(fā)中,我們經(jīng)常會遇到需要使用對稱密鑰加密的場景,比如客戶端調(diào)用接口時,參數(shù)包含手機(jī)號、身份證號或銀行卡號等。本文將詳細(xì)講解Go語言使用對稱加密的方法,需要的可以參考一下
    2022-06-06
  • Go語言如何利用Mutex保障數(shù)據(jù)讀寫正確

    Go語言如何利用Mutex保障數(shù)據(jù)讀寫正確

    這篇文章主要介紹了互斥鎖的實現(xiàn)機(jī)制,以及?Go?標(biāo)準(zhǔn)庫的互斥鎖?Mutex?的基本使用方法,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下
    2023-05-05
  • 一文了解Go語言中的函數(shù)與方法的用法

    一文了解Go語言中的函數(shù)與方法的用法

    與大部分語言一致,Go語言中的函數(shù)與方法定義與其他語言基本一致,但也有一定的差別。本文將通過示例詳細(xì)講講Go語言中函數(shù)與方法的用法,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • 理解Golang中的數(shù)組(array)、切片(slice)和map

    理解Golang中的數(shù)組(array)、切片(slice)和map

    這篇文章主要介紹了理解Golang中的數(shù)組(array)、切片(slice)和map,本文先是給出代碼,然后一一分解,并給出一張內(nèi)圖加深理解,需要的朋友可以參考下
    2014-10-10

最新評論