var cvt []rune = []rune{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'} func toHex(num int) string { if num == 0 { return "0" } res := make([]rune, 0) // Arithmetic shifts for signed integer and logical shifts for unsigned integer. for n := uint32(num); n != 0; n >>= 4 { res = append(res, cvt[n&0xf]) } for l, r := 0, len(res)-1; l < r; l, r = l+1, r-1 { res[l], res[r] = res[r], res[l] } return string(res) }