38

this wiki page gave a general idea of how to convert a single char to ascii http://en.wikibooks.org/wiki/Ruby_Programming/ASCII

But say if I have a string and I wanted to get each character's ascii from it, what do i need to do?

"string".each_byte do |c|
      $char = c.chr
      $ascii = ?char
      puts $ascii
end

It doesn't work because it's not happy with the line $ascii = ?char

syntax error, unexpected '?'
      $ascii = ?char
                ^

7 Answers 7

61

The c variable already contains the char code!

"string".each_byte do |c|
    puts c
end

yields

115
116
114
105
110
103
Sign up to request clarification or add additional context in comments.

Comments

22
puts "string".split('').map(&:ord).to_s

1 Comment

even nicer than split('') is calling chars
14

Ruby String provides the codepoints method after 1.9.1.

str = 'hello world'
str.codepoints
=> [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100] 

str = "你好世界"
str.codepoints
=> [20320, 22909, 19990, 30028]

1 Comment

do you actually need the .to_a after codepoints? Seems like codepoints already returns an array "abcde".codepoints.class #=> Array
12

use "x".ord for a single character or "xyz".sum for a whole string.

Comments

8

please refer to this post for the changes in ruby1.9 Getting an ASCII character code in Ruby using `?` (question mark) fails

Comments

8

You could also just call to_a after each_byte or even better String#bytes

=> 'hello world'.each_byte.to_a
=> [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

=> 'hello world'.bytes
=> [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

Comments

5
"a"[0]

or

?a

Both would return their ASCII equivalent.

3 Comments

Did this change in Ruby 1.9 ?
Yea, in Ruby 1.8 it return the characters ascii value, but it ruby the character at the index in ruby 1.9...
"a"[0].ord should return the ascii code. Note that it's actually a unicode code.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.