Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String fmt.Sscanf无法正确读取十六进制_String_Go_Hex_Scanf - Fatal编程技术网

String fmt.Sscanf无法正确读取十六进制

String fmt.Sscanf无法正确读取十六进制,string,go,hex,scanf,String,Go,Hex,Scanf,我无法读回已序列化为十六进制格式的值。当我格式化一个整数时,下面的代码生成一个值0x14。但是,当我试图从字符串中读回该值时,会得到无效的结果。有人能帮我找出我做错了什么吗 我有预先存在的文本文件,我正在用包含此格式的多行解析这些文本文件,因此序列化为其他格式将不是一个可行的解决方案。我需要使用这种特定的格式 根据go文档,这应该是可行的: 这些动词的行为与Printf相似。例如,%x将扫描一个十六进制数形式的整数,%v将扫描该值的默认表示格式。Printf谓词%p和%T以及标志和+未实现。对于

我无法读回已序列化为十六进制格式的值。当我格式化一个整数时,下面的代码生成一个值0x14。但是,当我试图从字符串中读回该值时,会得到无效的结果。有人能帮我找出我做错了什么吗

我有预先存在的文本文件,我正在用包含此格式的多行解析这些文本文件,因此序列化为其他格式将不是一个可行的解决方案。我需要使用这种特定的格式

根据go文档,这应该是可行的:

这些动词的行为与Printf相似。例如,%x将扫描一个十六进制数形式的整数,%v将扫描该值的默认表示格式。Printf谓词%p和%T以及标志和+未实现。对于浮点值和复数值,所有有效的格式化谓词%b%e%e%f%f%g%g%x%x和%v都是等效的,并且接受十进制和十六进制表示法,例如:2.3e+7、0x4.5p-8和数字分隔下划线,例如:3.14159_26535_89793


请注意文档中的这句话:

Printf谓词%p和%T以及标志和+未实现

因此:


请注意文档中的这句话:

Printf谓词%p和%T以及标志和+未实现

因此:

%x谓词将扫描十六进制整数,但不会扫描0x前缀。您可以将该前缀添加到格式字符串中:

var decode int
numRead, err := fmt.Sscanf("0x14", "0x%x", &decode)
fmt.Println(decode, numRead, err) 
这将正确地将0x14输入扫描为十进制整数值20,请在以下位置尝试:

这输出相同的结果。试一试这个。这具有灵活性,可以在多个基址中指定输入,将从前缀%v中检测基址,并扫描默认表示格式中的值,例如0x表示六进制,0表示八进制,0b表示二进制

您还可以使用where来指定base==0,在这种情况下,base由字符串的前缀表示:base 2表示0b,base 8表示0或0o,base 16表示0x,base 10表示其他

请在上尝试此选项。

%x谓词将扫描十六进制整数,但不会扫描0x前缀。您可以将该前缀添加到格式字符串中:

var decode int
numRead, err := fmt.Sscanf("0x14", "0x%x", &decode)
fmt.Println(decode, numRead, err) 
这将正确地将0x14输入扫描为十进制整数值20,请在以下位置尝试:

这输出相同的结果。试一试这个。这具有灵活性,可以在多个基址中指定输入,将从前缀%v中检测基址,并扫描默认表示格式中的值,例如0x表示六进制,0表示八进制,0b表示二进制

您还可以使用where来指定base==0,在这种情况下,base由字符串的前缀表示:base 2表示0b,base 8表示0或0o,base 16表示0x,base 10表示其他


试试这件衣服。

谢谢!我感谢你为提供替代方案所付出的额外努力,我学到了一些新技巧:谢谢!我感谢您为提供替代方案所付出的额外努力,我学到了一些新技巧:啊,我确实读过,但出于某种原因,它没有表明我需要自己在格式字符串中添加0x前缀,因为我无法使用等效格式。谢谢你的假支票!啊,我确实读过,但出于某种原因,它没有表明我需要自己在格式字符串中添加0x前缀,因为我不能使用等效格式。谢谢你的假支票!
var decode int
numRead, err := fmt.Sscanf("0x14", "0x%x", &decode)
fmt.Println(decode, numRead, err) 
20 1 <nil>
var decode int
numRead, err := fmt.Sscanf("0x14", "%v", &decode)
fmt.Println(decode, numRead, err) // Outputs: 20 <nil>
decode, err := strconv.ParseInt("0x14", 0, 64)
fmt.Println(decode, err)