在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