Преобразовать строку шестнадцатеричного значения в представление байта [] - PullRequest
0 голосов
/ 16 мая 2019

Я видел несколько вопросов для преобразования String в байтовый массив, но я хочу привести к byte []. Так, например, если у меня есть a := "68656c6c6f20776f726c64", если я делаю []byte(a), он преобразует каждое число в его шестнадцатеричное значение, но я хочу, чтобы оно прямо интерпретировалось как шестнадцатеричное напрямую, так что у меня есть []byte b = [68, 65, 6c, etc.]

Есть ли другой способ отличаться от итерации строки и каждых 2 символов, добавляя их к []byte?

1 Ответ

0 голосов
/ 16 мая 2019

Строка - это байтовый массив. Приведение одного к другому получает то, что вы видите; символ a имеет целочисленное значение (97 или 61 в шестнадцатеричном формате), и вы получаете байтовый массив, который составляет строку символов. Если вы хотите, чтобы строка "ff" стала целым числом 255 (ff в шестнадцатеричном), то это не приведение, а разбор (декодирование) строки на основе определенной логики (то есть, что строка состоит из шестнадцатеричных представлений ASCII). цифр). Для этого вы хотите использовать соответствующий декодер, то есть стандартную библиотеку hex.DecodeString, как предложил mh-cbon:

src := []byte("68656c6c6f20776f726c64")

dst := make([]byte, hex.DecodedLen(len(src)))
n, err := hex.Decode(dst, src)
if err != nil {
    log.Fatal(err)
}

fmt.Printf("%s\n", dst[:n])
...