code

정수에서 이진 표현으로 변환

codestyles 2021. 1. 10. 17:16
반응형

정수에서 이진 표현으로 변환


Go에 숫자 유형 중 하나를 이진 숫자 형식으로 변환하기위한 내장 기능이 있는지 누구든지 아이디어를 얻었습니다.

예를 들어 123입력 인 경우 문자열 "1111011"은 출력이됩니다.


strconv패키지가 FormatInt을 받아들이는, int64당신은 기본을 지정할 수 있습니다.

n := int64(123)

fmt.Println(strconv.FormatInt(n, 2)) // 1111011

데모 : http://play.golang.org/p/leGVAELMhv

http://golang.org/pkg/strconv/#FormatInt

func FormatInt(i int64, base int) string

FormatInt는 2 <= base <= 36에 대해 주어진 기수로 i의 ​​문자열 표현을 반환합니다. 결과는 숫자 값> = 10에 대해 소문자 'a'에서 'z'를 사용합니다.


fmt 패키지 도 참조하십시오 .

n := int64(123)
fmt.Printf("%b", n)  // 1111011

이 코드는 큰 정수에서 작동합니다 *big.Int.

x := big.NewInt(123)
s := fmt.Sprintf("%b", x)
// s == "1111011"

인터페이스를 *big.Int구현 하기 때문 fmt.Formatter입니다.

https://stackoverflow.com/a/23317788/871134 에서 가져옴


@Mark가 제공 한 답변을 기반으로 구축

OP가 정수를 인쇄하는 방법을 물었지만, 눈이 흔들리지 않고 64 비트 이상의 데이터를보고 싶습니다.

/* --- Credit to Dave C in the comments --- */
package main

import (
    "bytes"
    "fmt"
)

func main() {
    fmt.Printf("<%s>\n", fmtBits([]byte{0xDE, 0xAD, 0xBE, 0xEF, 0xF0, 0x0D, 0xDE, 0xAD, 0xBE, 0xEF, 0xF0, 0x0D}))

    // OUTPUT:
    // <11011110 10101101 10111110 11101111 11110000 00001101 11011110 10101101 10111110 11101111 11110000 00001101>
}

func fmtBits(data []byte) []byte {
    var buf bytes.Buffer
    for _, b := range data {
        fmt.Fprintf(&buf, "%08b ", b)
    }
    buf.Truncate(buf.Len() - 1) // To remove extra space
    return buf.Bytes()
}
play.golang.org에서이 코드를 참조하세요.

이진 형식으로 음수를 올바르게 나타내려면 안전하지 않은 포인터를 사용해야합니다.

package main

import (
    "fmt"
    "strconv"
    "unsafe"
)

func bInt(n int64) string {
    return strconv.FormatUint(*(*uint64)(unsafe.Pointer(&n)), 2)
}

func main() {
    fmt.Println(bInt(-1))
}

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

참조 URL : https://stackoverflow.com/questions/13870845/converting-from-an-integer-to-its-binary-representation

반응형