2017-06-22 30 views
0

大きなintをバイトに変換し、そのバイトをbig intに変換してから、2つの値を比較したい。私は以下のようなコードを使用して、それをしています: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

の値ではなく、big.Intの値とpointersの値を比較しています。 big.Int値を比較するInt.Cmp methodを使用して行われなければならない:

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") 
} 
関連する問題