2017-11-15 2 views
2

10 진수 표기법으로 변환하고 18 자릿수를 잘라내어 JSON으로 제공해야하는 긴 16 진수 문자열 형식의 데이터를 가져옵니다. 먼저 내가 ParseUint()를 사용하려고 시도했습니다에서긴 16 진수 문자열을 uint로 구문 분석하는 방법

"0x00000000000000000000000000000000000000000000d3c21bcecceda1000000" 

가 지원하는 가장 높은 int64이기 때문에, 내 번호가 너무 큰 것을 끝 :

예를 들어 내가 16 진수 문자열을 가질 수있다.

이 예제에서는 변환 및 절단 후 10^6이됩니다. 그러나이 숫자는 최대 10^12 (사전 절단 10^30!를 의미) 일 수있는 경우가 있습니다.

이것을 공격하는 가장 좋은 전략은 무엇입니까?

답변

5

64 비트보다 큰 숫자 작업에는 math/big을 사용하십시오. Int.SetString 예의

다음 math/big 종류도 encoding.TextMarshalerfmt.Scanner 및 인터페이스를 지원

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

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

. 예를 들어

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

또는

i := new(big.Int) 
fmt.Sscanf("0x000000d3c21bcecceda1000000", "0x%x", i) 
관련 문제