ホームページ > バックエンド開発 > Golang > Go の組み込み整数型よりも大きい 16 進文字列を処理するにはどうすればよいですか?

Go の組み込み整数型よりも大きい 16 進文字列を処理するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-15 18:08:09
オリジナル
694 人が閲覧しました

How to Handle Hexadecimal Strings Larger Than Go's Built-in Integer Types?

Go で大きすぎる 16 進数の文字列を解析する方法

組み込みの整数型の容量を超える数値を扱う場合、16 進数の文字列を 10 進数に変換するのが困難になる場合があります。 Golang は、 math/big パッケージで強力なソリューションを提供します。

16 進数の文字列を Big Integer に変換する

16 進数の文字列を big.Int に変換するには、SetIntString メソッドを使用します。

package main

import "math/big"

func main() {
    // Example hexadecimal string
    hexString := "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000"

    // Create a new big.Int
    i := new(big.Int)

    // Convert the hexadecimal string to a big.Int
    i.SetString(hexString, 16)

    // Print the converted number
    println(i)
}
ログイン後にコピー

小数点切り捨て表現

16 進数の文字列を big.Int に変換した後、Truncate メソッドを使用して 10 進数の表現を切り捨てることができます。例:

func Truncate(x *big.Int, prec uint) {
    f := new(big.Float).SetInt(x)

    f.SetPrec(int64(prec))
    f.Int(x)
}
ログイン後にコピー

この関数は、big.Float を big.Int に変換し直す前に、big.Float の精度を目的の小数点以下の桁数に設定します。

使用例

fmt パッケージを使用して、big.Int 値を解析してフォーマットできます:

package main

import "fmt"

func main() {
    hexString := "0x000000d3c21bcecceda1000000"

    // Create a new big.Int
    i := new(big.Int)

    // Parse the hexadecimal string
    fmt.Sscan(hexString, i)

    // Alternatively, you can use fmt.Sscanf
    // fmt.Sscanf(hexString, "0x%x", i)

    // Truncate to 18 decimal places
    Truncate(i, 18)

    // Marshal to JSON
    jsonBytes, _ := i.MarshalJSON()
    fmt.Println(string(jsonBytes))
}
ログイン後にコピー

以上がGo の組み込み整数型よりも大きい 16 進文字列を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート