Как расширить класс String и прикрепить метод с именем to_bytes
?
Как преобразовать строку в байты в Ruby?
Ответ 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]