Подтвердить что ты не робот

Преобразование из целого числа в его двоичное представление

Кто-нибудь понял, есть ли какая-либо встроенная функциональность в Go для преобразования из любого из числовых типов в свою двоичную числовую форму.

Например, если 123 был входом, строка "1111011" была бы выходом.

4b9b3361

Ответ 1

В пакете strconv есть FormatInt, который принимает int64 и позволяет указать базу.

n := int64(123)

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

DEMO: http://play.golang.org/p/leGVAELMhv

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

func FormatInt(i int64, base int) string

FormatInt возвращает строковое представление я в данной базе, для 2 <= base <= 36. Результат использует строчные буквы 'a' to 'z' для цифровых значений >= 10.

Ответ 2

См. также fmt пакет:

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

Ответ 3

Основываясь на ответе, предоставленном @Mark

Хотя ОП задал вопрос о том, как печатать целое число, я часто хочу посмотреть на данные размером более 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

Ответ 4

Этот код работает с большими целыми числами *big.Int:

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

потому что *big.Int реализует интерфейс fmt.Formatter.

Взято из fooobar.com/info/187220/...