ホームページ >バックエンド開発 >Golang >Go で非常に大きな 16 進数の文字列を高精度で整数に解析するにはどうすればよいですか?

Go で非常に大きな 16 進数の文字列を高精度で整数に解析するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-17 16:38:09946ブラウズ

How to Parse Extremely Large Hexadecimal Strings into Integers in Go with High Precision?

長い 16 進数文字列を高精度で uint に解析する

長い 16 進数文字列を高精度で 10 進数表記に変換することは、さまざまなプログラミングで一般的なタスクですシナリオ。ただし、Go のデフォルトの ParseInt()/ParseUint() 関数には、64 ビット精度を超える数値を扱う場合に制限があります。

この問題に対処するには、推奨されるアプローチは、次の math/big パッケージを利用することです。行く。このパッケージは、任意のサイズの整数の操作をサポートし、標準の int64 型が対応できるよりもはるかに大きな数値を処理できるようにします。

高精度解析に math/big を使用する

math/big パッケージは、任意の整数を表す big.Int 型を提供します。精度。 16 進文字列を big.Int に変換するには、次の手順を使用できます。

  1. 新しい big.Int 変数を作成します。
  2. big.Int で SetString メソッドを呼び出します。 16 進文字列を解析するための変数。最初の引数として 16 進数の文字列を渡し、2 番目の引数として基数 (16 進数の場合は 16) を渡します。

math/big の例

例は次のとおりです。 math/big を使用して長い 16 進文字列を解析してbig.Int:

import (
    "fmt"
    "math/big"
)

func main() {
    s := "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000"

    i := new(big.Int)
    i.SetString(s, 16)

    fmt.Println(i)
}

このコードは、指定された 16 進文字列を big.Int に変換し、結果を出力します。

math/big の追加機能

math/big パッケージは、encoding.TextMarshaler インターフェイスと fmt.Scanner インターフェイスのサポートも提供します。これにより、テキストベースのソースとの間で big.Int 値を簡単に読み書きできるようになります。

たとえば、fmt.Sscan():

を使用して 16 進文字列を解析するには、次の構文を使用できます。
var i big.Int
fmt.Sscan("0x000000d3c21bcecceda1000000", &i)

あるいは、fmt.Sscanf() を使用して 16 進文字列を直接解析して、 big.Int:

var i big.Int
fmt.Sscanf("0x000000d3c21bcecceda1000000", "0x%x", &i)

以上がGo で非常に大きな 16 進数の文字列を高精度で整数に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。