Как преобразовать int16 в шестнадцатеричную строку в Golang - PullRequest
0 голосов
/ 16 июня 2019

Мне нужно преобразовать формат данных int16 в строку, представляющую его шестнадцатеричное значение.

Я пробовал некоторые шестнадцатеричные конвертеры, но они изменяют данные вместо изменения форматирования. Мне нужно, чтобы это было строковое представление шестнадцатеричного значения.

data := (data from buffer)

fmt.Printf("BUFFER DATA : %X\n", data) // output print on screen D9DC (hex)
fmt.Println(("BUFFER DATA : ", string(data)) // output print on screen 55772 (dec)
fmt.Println(("BUFFER DATA : ", data) // output print on screen [?]

Как я могу преобразовать формат данных, чтобы он печатал D9DC с fmt.Println?

Полный код здесь https://play.golang.org/p/WVpMb9lh1Rx

1 Ответ

2 голосов
/ 16 июня 2019

Поскольку fmt.Println не принимает флаги формата, он печатает каждую переменную в зависимости от ее типа.

crc16.Checksum возвращает int16, поэтому fmt.Println отобразит целочисленное значение вашей шестнадцатеричной строки, равное 55772.

Если вы хотите, чтобы fmt.Println печатал D9DC вместо целочисленного значения, у вас есть несколько вариантов выбора.

  • Преобразуйте ваше целое число в строку, содержащую шестнадцатеричное значение (что означает, что если вы измените свое целое число, вам нужно будет преобразовать его в строку перед использованием
  • Создайте свой собственный тип с помощью метода String(), который является целым числом, но при печати представлен шестнадцатеричным значением.

Для второго варианта ваш тип может выглядеть примерно так:

type Hex int16

func (h Hex) String() string {
    return strconv.FormatInt(int64(h), 16)
}

fmt.Println будет автоматически использовать этот метод, поскольку это означает, что тип Hex реализует интерфейс Stringer. Для получения дополнительной информации об этом, вот некоторые ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...