2016-05-20 5 views

ответ

8

Это простой способ сделать это:

func stringToBin(s string) (binString string) { 
    for _, c := range s { 
     binString = fmt.Sprintf("%s%b",binString, c) 
    } 
    return 
} 

Как я включил в комментарии к другому ответу вы также можете использовать вариант "%s%.8b" который будет подушечка строки с ведущие нули, если вам нужно или хотите, чтобы представлять 8 бит ... это, однако, не имеет никакого значения, если ваш персонаж требует больше, чем 8 бит для представления, такие как греческие символы:

Φ 1110100110

λ 1110111011

μ 1110111100

Или эти математические символы печати 14 бит:

≠ 10001001100000

⊂ 10001010000010

⋅ 10001011000101

Итак, предостережение emptor: пример здесь означает простое демонстрационное изображение, которое соответствует критериям исходного сообщения, а не надежное средство для работы с представлениями base2 кодов Unicode.

3

Во-первых, двоичное представление «CC» имеет значение «0100001101000011», вам нужно позаботиться о ведущем 0, иначе ваша строка может быть получена разными способами.

func binary(s string) string { 
    res := "" 
    for _, c := range s { 
     res = fmt.Sprintf("%s%.8b", res, c) 
    } 
    return res 
} 

Это дает желаемый результат: `binary (" CC ") =" 0100001101000011 ".

+1

+1, но если вы хотите добавить ведущий 0, то меньше кода для записи 'res = fmt.Sprintf («% s% .8b », res, c)' note the. между% и 8 – Snowman

+0

Спасибо, я не знал о синтаксисе. И это, вероятно, более эффективно. –

0

Другой подход

func strToBinary(s string, base int) []byte { 

    var b []byte 

    for _, c := range s { 
     b = strconv.AppendInt(b, int64(c), base) 
    } 

    return b 
} 
Смежные вопросы