2017-06-22 147 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完成