2017-11-15 1 views
2

Ich bin in Daten ziehen, die in langen hexadezimalen Zeichenfolge Form ist, die ich in Dezimalschreibweise konvertieren, 18 Dezimalstellen abschneiden müssen, und dann in JSON aufspielen.Wie lang hexadezimale Zeichenfolge in Uint zu analysieren

Zum Beispiel kann ich die Hex-String haben:

"0x00000000000000000000000000000000000000000000d3c21bcecceda1000000" 

auf den ersten Einsatz ParseUint() ich versuchte, aber da die höchste unterstützt int64 ist, meine Nummer landet viel zu groß ist.

Dieses Beispiel nach Konvertierung und Kürzung ergibt 10^6. Es gibt jedoch Fälle, in denen diese Zahl bis zu 10^12 sein kann (was bedeutet, dass die Abkürzung 10^30 ist!).

Was ist die beste Strategie, um dies anzugreifen?

Antwort

5

Verwenden Sie math/big für die Arbeit mit Zahlen größer als 64 Bit.

Vom Int.SetString Beispiel:

s := "d3c21bcecceda1000000" 
i := new(big.Int) 
i.SetString(s, 16) 
fmt.Println(i) 

https://play.golang.org/p/vf31ce93vA

Die math/big Typen auch die encoding.TextMarshaler und fmt.Scanner Schnittstellen unterstützen.

Zum Beispiel

i := new(big.Int) 
fmt.Sscan("0x000000d3c21bcecceda1000000", i) 

Oder

i := new(big.Int) 
fmt.Sscanf("0x000000d3c21bcecceda1000000", "0x%x", i) 
Verwandte Themen