2014-02-02 4 views
-3

Как показать характер, десятичное значение, и шестнадцатеричное значение каждого символа в строкеRuby: Как показать характер, десятичное значение, и шестнадцатеричное значение каждого символа в строке

"hello test test" 
+1

Пример вывода будет хорошо h10569e10064 .. ?? –

ответ

3

Я надеюсь, что это не домашнее задание? Хорошо, если вы застряли, попросите помочь в домашней работе, но, пожалуйста, не просите полного решения: вы ничего не узнаете, если не приложите усилий.

Вам нужен 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 
-1

Каждый символ использовать 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"] 
+2

Что-то не так с шестнадцатеричной версией. –

+0

Поскольку 'to_i (16)' пытается преобразовать символы типа h, выходящие за пределы диапазона. 'h' - 18-е число (0-9 и a-f), которые по умолчанию преобразуются в 0. То же самое с 'hex', я думаю. пс. Принимая только английские символы. –

+0

@TonyHopkinson, потому что некоторые из символов не могут быть преобразованы в и из 'hex',' hex' диапазонов от '0 до f' – bjhaid

-1
'hello test test'.each_char { |c| puts "#{c} => #{c.hex} => #{c.ord}" } 
Смежные вопросы