Как перейти из [] байтов, чтобы получить шестнадцатеричный
http://play.golang.org/p/SKtaPFtnKO
func md(str string) []byte {
h := md5.New()
io.WriteString(h, str)
fmt.Printf("%x", h.Sum(nil))
// base 16, with lower-case letters for a-f
return h.Sum(nil)
}
Мне нужна строка Hash-key, которая преобразуется из входной строки. Я смог получить его в формате байтов, используя h.Sum(nil) и смог распечатать хэш-ключ в формате% x. Но я хочу вернуть формат% x из этой функции, чтобы я мог использовать его для преобразования адреса электронной почты в Hash-key и использовать его для доступа к Gravatar.com.
Как мне получить хэш-ключ% x с помощью функции md5 в Go?
Спасибо,
Ответы
Ответ 1
Если я правильно понял, вы хотите вернуть формат% x:
вы можете импортировать hex и использовать метод EncodeToString
str := hex.EncodeToString(h.Sum(nil))
или просто значение Sprintf:
func md(str string) string {
h := md5.New()
io.WriteString(h, str)
return fmt.Sprintf("%x", h.Sum(nil))
}
Обратите внимание, что Sprintf работает медленнее, потому что ему нужно проанализировать строку формата и затем отразить на основе найденного типа
http://play.golang.org/p/vsFariAvKo
Ответ 2
Вам следует избегать использования пакета fmt
для этого. Пакет fmt
использует отражение, и это дорого для чего угодно, кроме отладки. Вы знаете, что у вас есть, и для чего хотите конвертировать, поэтому вы должны использовать соответствующий пакет конверсий.
Для преобразования из двоичного в шестнадцатеричный и обратно используйте пакет encoding/hex.
В шестнадцатеричный string
:
str := hex.EncodeToString(h.Sum(nil))
От Hex string
:
b, err := hex.DecodeString(str)
Существуют также функции Encode/Decode для []byte
.
Когда вам нужно преобразовать в/из десятичного числа, используйте пакет strconv.
От int
до string
:
str := strconv.Itoa(100)
От string
до int
:
num, err := strconv.Atoi(str)
В этом пакете есть несколько других функций, которые выполняют другие преобразования (база и т.д.).
Поэтому, если вы не отлаживаете или не форматируете сообщение об ошибке, используйте правильные преобразования. Пожалуйста.