英文:
Converting hex value by using multiple ways results in different outputs
问题
将一个十六进制值使用两个不同的函数转换会得到略有不同的输出结果。例如:
b, _ := new(big.Int).SetString("00662ad25db00e7bb38bc04831ae48b4b446d12698", 16)
fmt.Println(b.Bytes())
// 输出 [102 42 210 93 176 14 123 179 139 192 72 49 174 72 180 180 70 209 38 152]
fmt.Println(hex.DecodeString("00662ad25db00e7bb38bc04831ae48b4b446d12698"))
// 输出 [0 102 42 210 93 176 14 123 179 139 192 72 49 174 72 180 180 70 209 38 152]
为什么 DecodeString
的输出结果有一个前导的 0,而 big.Int
没有呢?
英文:
Converting an hex value with two different func result in slightly different output
For example
b, _ := new(big.Int).SetString("00662ad25db00e7bb38bc04831ae48b4b446d12698", 16)
fmt.Println(b.Bytes())
// output [102 42 210 93 176 14 123 179 139 192 72 49 174 72 180 180 70 209 38 152]
fmt.Println(hex.DecodeString("00662ad25db00e7bb38bc04831ae48b4b446d12698"))
// output [0 102 42 210 93 176 14 123 179 139 192 72 49 174 72 180 180 70 209 38 152]
Why is DecodeString have a leading 0 and big.Int does not?
答案1
得分: 5
Int.SetString
方法将字符串解释为编码的数字。在数字编码中,前导零不重要。例如,十六进制数编码的 0001 和 1 都表示数字 1。
hex.DecodeString
函数将字符串解释为十六进制编码的字节。前导零字节是重要的。
英文:
The Int.SetString
method interprets the string as an encoded number. Leading zeros are not significant in number encodings. For example, the hexadecimal number encodings 0001 and 1 both represent the number 1.
The hex.DecodeString
function interprets the string as hexadecimal encoded bytes. The leading zero byte is significant.
答案2
得分: 2
如果你反向拆分输入,你会得到以下结果:
00 66 2a d2 5d b0 0e 7b b3 8b c0 48 31 ae 48 b4 b4 46 d1 26 98
所以你可以看到,最高有效位(MSB)[1]是零,所以在输出中是可选的,就像这个程序成功运行一样:
package main
func main() {
println(01 == 1)
}
英文:
If you reverse split your input, you get this:
00 66 2a d2 5d b0 0e 7b b3 8b c0 48 31 ae 48 b4 b4 46 d1 26 98
So as you can see, the MSB [1] is zero, so it is optional in the output, similar to
how this program runs successfully:
package main
func main() {
println(01 == 1)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论