【发布时间】:2020-05-01 14:35:17
【问题描述】:
我无法读取已序列化为十六进制格式的值。当我格式化一个整数时,下面的代码会产生一个 0x14 的值。但是,当我尝试从字符串中读取该值时,会得到无效的结果。有人可以帮我弄清楚我做错了什么吗?
我有预先存在的文本文件,我正在用包含此格式的多行进行解析,因此序列化为不同的格式将不是一个可行的解决方案。我需要使用这种特定格式。
根据 go 文档,这应该可以工作:https://golang.org/pkg/fmt/
动词的行为类似于 Printf。例如,%x 将一个整数扫描为十六进制数,%v 将扫描该值的默认表示格式。未实现 Printf 动词 %p 和 %T 以及标志 # 和 +。对于浮点数和复数值,所有有效的格式化动词(%b %e %E %f %F %g %G %x %X 和 %v)都是等效的,并且接受十进制和十六进制表示法(例如:“2.3 e+7”、“0x4.5p-8”)和数字分隔下划线(例如:“3.14159_26535_89793”)。
package main
import (
"fmt"
)
func main() {
encode := 20
fmt.Println(fmt.Sprintf("%#x", encode)) // 0x14
var decode int
numRead, err := fmt.Sscanf("0x14", "%#x", &decode)
fmt.Println(decode, numRead, err) // 0 1 bad verb '%#' for integer
numRead, err = fmt.Sscanf("0x14", "%x", &decode)
fmt.Println(decode, numRead, err) // 0 1 nil
}
【问题讨论】: