在Ruby中chr()的相反之处是什么?

在很多语言中,有一对函数chr()ord() ,它们在数字和字符值之间进行转换。 在某些语言中, ord()被称为asc()

Ruby有Integer#chr ,这很好用:

 >> 65.chr A 

很公平。 但是你怎么去其他的方式呢?

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

打印:

 65 

这与我想要的非常接近。 但我真的宁愿避免循环 – 我正在寻找足够短的东西来声明一个const时可读。

如果String#ord在1.9中不存在,则在2.0中:

 "A".ord #=> 65 

在Ruby中,包括1.8系列,以下都将产生65(对于ASCII):

 puts ?A 'A'[0] 

Ruby 1.9中的行为已经改变了,上面的两个都会产生“A”。 在Ruby 1.9中正确的做法是:

 'A'[0].ord 

不幸的是,在Ruby 1.8中不存在ord方法。

尝试:

 'A'.unpack('c') 

我想要+1 dylanfm和AShelly的评论,但添加[0]:

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

解压缩调用返回一个包含单个整数的数组,在需要整数时并不总是被接受:

 $ ruby​​ -e'printf(“0x%02X \ n”,“A”.unpack(“C”))'
 -e:1:在`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的代码。

编辑传递C以大写解压缩,因为解包(“c”)给我-1其中ord()给我255(尽pipe在C的char被签名的平台上运行)。

另外,如果你有一个string中的字符,并且你想解码它没有循环:

 puts 'Az'[0] => 65 puts 'Az'[1] => 122 

刚刚通过RFC收集了一个纯Ruby版本的Stringprep。

请注意, chr在[0,255]之外失败,而是使用1.9.x – 2.1.x便携式replace:

 [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)> 

怎么样

放?

如果您不介意将值从数组中提取出来,则可以使用"A".bytes

你可以有这些:

 65.chr.ord 'a'.ord.chr 

我正在编写代码为1.8.6和1.9.3,我无法得到任何这些解决scheme在这两种工作环境:(

但是,我碰到另一个解决scheme: 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