1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

feat: add ToBigInt

This commit is contained in:
dudaodong
2024-12-02 11:25:16 +08:00
parent 8f3ea60636
commit 7fb49515ce
7 changed files with 217 additions and 61 deletions

View File

@@ -14,11 +14,13 @@ import (
"fmt"
"io"
"math"
"math/big"
"reflect"
"strconv"
"strings"
"github.com/duke-git/lancet/v2/structs"
"golang.org/x/exp/constraints"
"golang.org/x/text/encoding/simplifiedchinese"
"golang.org/x/text/transform"
)
@@ -483,3 +485,36 @@ func ToRawUrlBase64(value any) string {
return base64.RawURLEncoding.EncodeToString(marshal)
}
}
// ToBigInt converts an integer of any supported type (int, int64, uint64, etc.) to *big.Int
// Play: todo
func ToBigInt[T constraints.Integer](v T) (*big.Int, error) {
result := new(big.Int)
switch v := any(v).(type) {
case int:
result.SetInt64(int64(v)) // Convert to int64 for big.Int
case int8:
result.SetInt64(int64(v))
case int16:
result.SetInt64(int64(v))
case int32:
result.SetInt64(int64(v))
case int64:
result.SetInt64(v)
case uint:
result.SetUint64(uint64(v)) // Convert to uint64 for big.Int
case uint8:
result.SetUint64(uint64(v))
case uint16:
result.SetUint64(uint64(v))
case uint32:
result.SetUint64(uint64(v))
case uint64:
result.SetUint64(v)
default:
return nil, fmt.Errorf("unsupported type: %T", v)
}
return result, nil
}

View File

@@ -571,3 +571,12 @@ func ExampleToRawUrlBase64() {
// dHJ1ZQ
// ZXJy
}
func ExampleToBigInt() {
n := 9876543210
bigInt, _ := ToBigInt(n)
fmt.Println(bigInt)
// Output:
// 9876543210
}

View File

@@ -5,6 +5,7 @@ import (
"errors"
"fmt"
"io"
"math/big"
"reflect"
"strconv"
"testing"
@@ -741,3 +742,52 @@ func TestToRawUrlBase64(t *testing.T) {
d15, _ := base64.RawURLEncoding.DecodeString(r15)
assert.Equal("4+3/4?=", string(d15))
}
func TestToBigInt(t *testing.T) {
t.Parallel()
assert := internal.NewAssert(t, "TestToBigInt")
tests := []struct {
name string
input int64
want *big.Int
}{
{
name: "int",
input: 42,
want: big.NewInt(42),
},
{
name: "int8",
input: int64(int8(127)),
want: big.NewInt(127),
},
{
name: "int16",
input: int64(int16(32000)),
want: big.NewInt(32000),
},
{
name: "int32",
input: int64(int32(123456)),
want: big.NewInt(123456),
},
{
name: "int64",
input: int64(987654321),
want: big.NewInt(987654321),
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := ToBigInt(tt.input)
if err != nil {
t.Errorf("ToBigInt() error = %v", err)
return
}
assert.Equal(tt.want, got)
})
}
}

View File

@@ -1,51 +1,51 @@
-----BEGIN rsa private key-----
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
-----END rsa private key-----

View File

@@ -1,14 +1,14 @@
-----BEGIN rsa public key-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxZGG6vSSETKwW7bxx7NA
1tXmNh+0AAsOmdwOyd77C/F7bmf3iacdzsdJgumWpBZLpo7Xdke/6NWbzizdbawb
BKkLH5vdZpEYJsbIx9vQYPRrAL1taRHpWwqC86aZHhJ8afo5KARkW8U1BB+MCfJ0
oGOgkpHPbbs7jRNhrUP52BPbdRUw7ZwwJHEseuAvw+nv80UmHdI5mrgKj//8r+cB
1JnErqJi0yTOgYwKqOPFcMoaCoyLRdMV8en1QZ7nY6KWF32K/OBGM8++lRsZGttF
Thx3Zs54QU2GFgthH5rkMtucuZUXDN2k+QqV1XrSC/a+IDZ1zhx0+NUuExktOpOq
kvc4IslIOPAcBJ4MoUWShOy91rW34QSV2ZgD6VMTYMce6xpH4Oh680I4ZtewZiRd
BnQ4EADoxPbiBHfTQJfzUBtaZDXqOFNN+friCITTKice0dByDlCN85bL7et0hyIs
FU1xi0SmFbt3IBFwsJf5B/aorLhZqwCIUFvf7EahOH51PlGr7M2ltZtpgHmFBzB0
zYAoYOnDU1+avzVP5l9fObH4uLl8/fjeAr8pSB0drjaKf0Bj434aKrrftDyeGuMW
pXhFu9rr/eXXUVqU/jBfHR+60m+MBK9h8efkqtVW3EqNVApsapRFo/LNNDAC9lCK
WuFBjh0igdZNjSuatG9O9rMCAwEAAQ==
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxyEWKk4SEjsNfEJ0pBH7
dLaWGuHVwQn45oOG4Bo5XwQhpgTm1TD+OgFg69BSeJduGtUExbcWEk8SAWgaSMk9
2y8L/33cncabwDhLzMNOk1NBie9ScUENh8zVq5oJF6B16Ijk6gbhAuQ2KExA//FN
wU/AeG+nY5/mXMAqnxkl/INJd+UCRoEOZ+fvWDVyIS0zqb1XIQoi+rGVfcpaFX+O
+wPyHbbgRVVQjgimSq1DRSFHX19vRNQNWnNR0x01PsyTsSjNGTOKRInfupQEB17B
7EmOFU8NV7+PIoIlKSnSkl6jhpMPZd+Kd55ldlnybOLCFE4e+tzbCIG9pvI+wEDl
Ks/q4EUS8a4vJzpSc+WPAzohIkG6NTN6mh0V86dfexk+5lrnZ+zOb47769pOJy2N
nTMwUd6MMJDe5rm2coMSTNI/8uD3vHiQuh1Sbc/ognbk0kgI8/8mqjmy/C3nCbB4
hzwdYrv04HOT3WIL7rWWmWYkwbO+JitXFaFka0/2dQiA4P+po3Q4JipMEskG7SlW
NZAMvpuU5OnRW5d40sJz4vsEVwzOBoPWVupXplXlZ6ipBGySovL8LJGUI6CF6qfw
G8gCjojkz1Y44gxyR/Zt0idqZkelTBReIHiYK5r3Ql4OiGfCmMhDD+PQA3FlD0gN
C48ZLXknzEfvOnzqkETx3YMCAwEAAQ==
-----END rsa public key-----

View File

@@ -47,6 +47,7 @@ import (
- [ToUrlBase64](#ToUrlBase64)
- [ToRawStdBase64](#ToRawStdBase64)
- [ToRawUrlBase64](#ToRawUrlBase64)
- [ToBigInt](#ToBigInt)
<div STYLE="page-break-after: always;"></div>
@@ -1148,4 +1149,34 @@ func main() {
// dHJ1ZQ
// ZXJy
}
```
### <span id="ToBigInt">ToBigInt</span>
<p>值转换为bigInt。</p>
<b>函数签名:<span style="float:right;display:inline-block;">[运行](todo)</span></b>
```go
func ToBigInt[T constraints.Integer](v T) (*big.Int, error)
```
<b>示例:</b>
```go
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/convertor"
)
func main() {
n := 9876543210
bigInt, _ := convertor.ToBigInt(n)
fmt.Println(bigInt)
// Output:
// 9876543210
}
```

View File

@@ -47,6 +47,7 @@ import (
- [ToUrlBase64](#ToUrlBase64)
- [ToRawStdBase64](#ToRawStdBase64)
- [ToRawUrlBase64](#ToRawUrlBase64)
- [ToBigInt](#ToBigInt)
<div STYLE="page-break-after: always;"></div>
@@ -1116,4 +1117,34 @@ func main() {
// map[a:1 b:2] false
// &{test 1 0.1 true <nil> } false
}
```
### <span id="ToBigInt">ToBigInt</span>
<p>Converts an integer of any supported type (int, int64, uint64, etc.) to *big.Int</p>
<b>Signature:<span style="float:right;display:inline-block;">[Run](todo)</span></b>
```go
func ToBigInt[T constraints.Integer](v T) (*big.Int, error)
```
<b>Example:</b>
```go
package main
import (
"fmt"
"github.com/duke-git/lancet/v2/convertor"
)
func main() {
n := 9876543210
bigInt, _ := convertor.ToBigInt(n)
fmt.Println(bigInt)
// Output:
// 9876543210
}
```