102

多くの言語には、数値と文字値を変換するchr()とのペアの関数があります。ord()一部の言語でord()は、 と呼ばれasc()ます。

Rubyには がありInteger#chr、うまく機能します:

>> 65.chr
A

けっこうだ。しかし、どうやって他の方法に行くのですか?

"A".each_byte do |byte|
   puts byte
end

プリント:

65

それは私が望むものにかなり近いです。しかし、私はむしろループを避けたいと思っています - 私はconst.

4

10 に答える 10

84

String#ord が 1.9 に存在しなかった場合、2.0 には存在します。

"A".ord #=> 65
于 2013-12-10T17:50:39.023 に答える
33

1.8 シリーズまでの Ruby では、次のコードは両方とも 65 (ASCII の場合) を生成します。

puts ?A
'A'[0]

Ruby 1.9 で動作が変更され、上記の両方で代わりに "A" が生成されます。Ruby 1.9 でこれを行う正しい方法は次のとおりです。

'A'[0].ord

残念ながら、このordメソッドは Ruby 1.8 には存在しません。

于 2008-11-21T14:19:09.260 に答える
13

試す:

'A'.unpack('c')
于 2008-11-21T13:44:17.957 に答える
10

dylanfmとAShellyのコメントを+1したいのですが、[0]を追加します。

'A'.unpack('C')[0]

unpack呼び出しは、単一の整数を含む配列を返します。これは、整数が必要な場合に常に受け入れられるとは限りません。

$ ruby​​ -e'printf( "0x%02X \ n"、 "A" .unpack( "C"))'
-e:1:in `printf':配列を整数に変換できません(TypeError)
    -e:1から
$ ruby​​ -e'printf( "0x%02X \ n"、 "A" .unpack( "C")[0])'
0x41
$

Ruby 1.8.1、1.8.7、1.9.2で動作するコードを書こうとしています。

unpack( "c")は-1を返し、ord()は255を返します(Cのcharが署名されているプラ​​ットフォームで実行されているにもかかわらず)ため、Cを渡して大文字で解凍するように編集されました。

于 2011-05-27T01:34:37.927 に答える
4

RFC を介して純粋な Ruby バージョンの Stringprep をまとめているときに、これに遭遇しました。

[0,255] の外で失敗することに注意してくださいchr。代わりに、1.9.x - 2.1.x の移植可能な代替品を使用してください。

[22] pry(main)> "\u0221".ord.chr
RangeError: 545 out of char range
from (pry):2:in 'chr'
[23] pry(main)> x = "\u0221".unpack('U')[0]
=> 545
[24] pry(main)> [x].pack('U')
=> "ȡ"
[25] pry(main)>
于 2014-04-05T05:51:49.883 に答える
3

さらに、文字列に char があり、ループなしでデコードしたい場合:

puts 'Az'[0]
=> 65
puts 'Az'[1]
=> 122
于 2008-11-21T13:45:16.910 に答える
2

配列から値を引き出すことを気にしない場合は、次を使用できます"A".bytes

于 2014-05-24T21:51:55.353 に答える
2

あなたはこれらを持つことができます:

65.chr.ord
'a'.ord.chr
于 2014-03-10T19:38:07.103 に答える
2

どうですか

?A を置く

于 2008-11-21T13:32:08.030 に答える
0

私は1.8.6と1.9.3のコードを書いていますが、これらのソリューションを両方の環境で動作させることができませんでした:(

ただし、別の解決策を見つけました: http://smajnr.net/2009/12/ruby-1-8-nomethoderror-undefined-method-ord-for-string.html

それも私にはうまくいきませんでしたが、私はそれを自分の用途に合わせました:

unless "".respond_to?(:ord)
  class Fixnum
    def ord
      return self
    end
  end
end

それを行うと、以下は両方の環境で機能します

'A'[0].ord

于 2015-04-13T15:11:48.177 に答える