2017-06-22 140 views
0

我想将一个大的int转换为字节,将这些字节转换回大的int,然后比较这两个值。我下面使用类似的代码做它:big.Int不等于big.setBytes(bigint.Bytes())后收到的一个

package main 

import "fmt" 
import "math/big" 

func main() { 
    input := "37107287533902102798797998220837590246510135740250" 
    a := big.NewInt(0) 
    a.SetString(input, 10) 
    fmt.Println("number =", a) 

    z := a.Bytes() 
    b := big.NewInt(0) 
    b.SetBytes(z) 

    fmt.Println("number =", b) 

    if a!=b{ 
     fmt.Println("foo") 
    } 

} 

输出是:

number = 37107287533902102798797998220837590246510135740250 
number = 37107287533902102798797998220837590246510135740250 
foo 

这就奇怪了,这些数字看起来相等。 if循环内的代码不应该被执行。 我在这里错过了什么?

回答

2

您正在比较pointersbig.Int值,而不是内部big.Int值。

func (x *Int) Cmp(y *Int) (r int) 

CMP比较x和y,并返回:

-1 if x < y 
0 if x == y 
+1 if x > y 
if a.Cmp(b) != 0 { 
    fmt.Println("foo") 
} 
比较 big.Int值必须使用 Int.Cmp method完成