Как показать характер, десятичное значение, и шестнадцатеричное значение каждого символа в строкеRuby: Как показать характер, десятичное значение, и шестнадцатеричное значение каждого символа в строке
"hello test test"
Как показать характер, десятичное значение, и шестнадцатеричное значение каждого символа в строкеRuby: Как показать характер, десятичное значение, и шестнадцатеричное значение каждого символа в строке
"hello test test"
Я надеюсь, что это не домашнее задание? Хорошо, если вы застряли, попросите помочь в домашней работе, но, пожалуйста, не просите полного решения: вы ничего не узнаете, если не приложите усилий.
Вам нужен chars
итератор (или его псевдоним each_char
), как этот
s = "hello test test"
s.chars do |c|
puts "%s %3d %02X" % [ c, c.ord, c.ord ]
end
выход
h 104 68
e 101 65
l 108 6C
l 108 6C
o 111 6F
32 20
t 116 74
e 101 65
s 115 73
t 116 74
32 20
t 116 74
e 101 65
s 115 73
t 116 74
Каждый символ использовать String#chars
[72] pry(main)> "hello test test".chars
=> ["h", "e", "l", "l", "o", " ", "t", "e", "s", "t", " ", "t", "e", "s", "t"]
Десятичного значение каждого символа используют String#ord
[73] pry(main)> "hello test test".chars.map(&:ord)
=> [104, 101, 108, 108, 111, 32, 116, 101, 115, 116, 32, 116, 101, 115, 116]
ASCII hex
[84] pry(main)>"hello test test".chars.map { |x| x.ord.to_s(16) }
=> ["68","65","6c","6c","6f","20","74","65","73","74","20","74","65","73","74"]
Что-то не так с шестнадцатеричной версией. –
Поскольку 'to_i (16)' пытается преобразовать символы типа h, выходящие за пределы диапазона. 'h' - 18-е число (0-9 и a-f), которые по умолчанию преобразуются в 0. То же самое с 'hex', я думаю. пс. Принимая только английские символы. –
@TonyHopkinson, потому что некоторые из символов не могут быть преобразованы в и из 'hex',' hex' диапазонов от '0 до f' – bjhaid
'hello test test'.each_char { |c| puts "#{c} => #{c.hex} => #{c.ord}" }
Пример вывода будет хорошо h10569e10064 .. ?? –