如何在Golang中将int16转换为十六进制编码的字符串

时间:2019-06-16 03:52:27

标签: go

我需要将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 个答案:

答案 0 :(得分:2)

由于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接口。有关更多信息,请参见以下资源: