나는 bignumbers (big.Int 또는 더 큰 big.Rat)를 16 진수 값으로 변환하려고합니다.golang의 16 진수로 큰 숫자
나는 항상 음수 0xff..xx 또는 고정 숫자 일 때 숫자를 변환하는 데 문제가 있습니다.
할 방법이 있습니까?
나는 bignumbers (big.Int 또는 더 큰 big.Rat)를 16 진수 값으로 변환하려고합니다.golang의 16 진수로 큰 숫자
나는 항상 음수 0xff..xx 또는 고정 숫자 일 때 숫자를 변환하는 데 문제가 있습니다.
할 방법이 있습니까?
확실하지 당신이 필요하지만, big.Int, big.Float 및 big.Rat가 fmt.Formatter
인터페이스를 구현 이슈의 어떤 종류의, 당신은 변환 할 수 % X% X와의 printf 가족을 사용할 수 있습니다 16 진수 문자열 표현 예 : 주어진베이스 캐릭터까지의 숫자로 변환
package main
import (
"fmt"
"math/big"
)
func toHexInt(n *big.Int) string {
return fmt.Sprintf("%x", n) // or %X or upper case
}
func toHexRat(n *big.Rat) string {
return fmt.Sprintf("%x", n) // or %X or upper case
}
func main() {
a := big.NewInt(-59)
b := big.NewInt(59)
fmt.Printf("negative int lower case: %x\n", a)
fmt.Printf("negative int upper case: %X\n", a) // %X or upper case
fmt.Println("using Int function:", toHexInt(b))
f := big.NewRat(3, 4) // fraction: 3/4
fmt.Printf("rational lower case: %x\n", f)
fmt.Printf("rational lower case: %X\n", f)
fmt.Println("using Rat function:", toHexRat(f))
}
예를 들어 -54가 -34 대신 FFFFFFFFFFFFFFCA 또는 FFCA가 아니어야합니다. 어쩌면 내가 얻지 못했던 어떤 것 –
당신이 그 표현을 어디에서 얻었는지 모르겠지만 적어도 ** C ** 가족의 모든 언어에 대해 알고있는 것은 기호를 나타내는 첫 번째 비트를 희생한다는 것입니다. 그래서 우리는 서명을하지 않은 것입니다 ints 대 ints하지만 내부를 알고 싶다면 [여기] (http://stackoverflow.com/questions/37582550/golang-twos-complement-and-fmt-printf)를 확인하십시오.이 경우에도 우리는 ' 큰 숫자를 참조하고 내부적으로 그들은 슬라이스 나리스트에 저장됩니다. 왜냐하면 정규 레지스터에 맞지 않기 때문에 그 배열의 내부 표현을 갖는 것이 얼마나 유용한 지 알 수 없습니다. –
-54 (기준 10) -36 (기준 16). FFCA는 2의 보수 표현입니다. 많은 객체는 big.Int처럼 그들이 어떻게 데이터를 비밀을 저장의 세부 정보를 유지하고 싶습니다. 공유하고 싶지는 않지만 사용자 코드를 위반하지 않고 구현을 변경할 수 있기를 원하기 때문입니다. –
big.Int'''가 텍스트가() '기능. 16 진수 문자열을 만들려면'value.Text (16)'을 사용하십시오. 그게 네가 원하는대로 할거야? –