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

Как преобразовать строку в байты в Ruby?

Как расширить класс String и прикрепить метод с именем to_bytes?

4b9b3361

Ответ 1

Ruby уже имеет метод String#each_byte, который сглаживается до String#bytes.

До Ruby 1.9 строки были эквивалентны байтовым массивам, т.е. символ считался одним байтом. Это прекрасно для текста ASCII и различных текстовых кодировок, таких как Win-1252 и ISO- 8859-1, но плохо с Unicode, который мы видим все чаще и чаще в Интернете. Ruby 1.9+ известен Unicode, и строки больше не считаются состоящими из байтов, но вместо этого состоят из символов, длина которых может быть несколько.

Итак, если вы пытаетесь манипулировать текстом в виде одиночных байтов, вам нужно убедиться, что ваш вход ASCII или, по крайней мере, однобайтовый набор символов. Если у вас есть многобайтовые символы, вы должны использовать String#each_char или String.split(//) или String.unpack с флагом U.


Что означает//в String.split(//)

// совпадает с использованием ''. Либо указывает split на возврат символов. Вы также можете обычно использовать chars.

Ответ 2

String#bytes возвращает перечислитель через строковые байты. .to_a может преобразовать его в массив.

"asd".bytes.to_a
=> [97, 115, 100]

Ответ 3

С помощью распаковки мы можем преобразовать строку в любой формат: - byte, bite (MSB, LSB), ASCII или hex. перейдите по этой ссылке: - http://blog.bigbinary.com/2011/07/20/ruby-pack-unpack.html. Чтобы преобразовать строку в байты: -

"abcde".unpack('c*')  
=> [97, 98, 99, 100, 101]