在许多语言中有一对函数,chr()并且ord(),该数字和字符值之间的转换.在某些语言中,ord()被称为asc().
Ruby有Integer#chr,效果很好:
>> 65.chr
A
Run Code Online (Sandbox Code Playgroud)
很公平.但你怎么走另一条路呢?
"A".each_byte do |byte|
puts byte
end
Run Code Online (Sandbox Code Playgroud)
打印:
65
Run Code Online (Sandbox Code Playgroud)
这非常接近我想要的.但我真的宁愿避免循环 - 我正在寻找一些足够短的东西,以便在声明时可读const.
Rob*_*ble 33
在Ruby中,包括1.8系列,以下都将生成65(对于ASCII):
puts ?A
'A'[0]
Run Code Online (Sandbox Code Playgroud)
Ruby 1.9中的行为发生了变化,上述两种情况都会产生"A".在Ruby 1.9中执行此操作的正确方法是:
'A'[0].ord
Run Code Online (Sandbox Code Playgroud)
不幸的是,ordRuby 1.8中不存在该方法.
Mar*_*rey 10
我想+1 dylanfm和AShelly的评论,但添加[0]:
'A'.unpack('C')[0]
unpack调用返回一个包含单个整数的Array,在需要整数的地方并不总是接受它:
$ ruby -e 'printf("0x%02X\n", "A".unpack("C"))'
-e:1:in `printf': can't convert Array into Integer (TypeError)
from -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(尽管在C的char签名的平台上运行).
小智 5
刚刚通过 RFC 整理纯 Ruby 版本的 Stringprep 时遇到了这一点。
\n\n当心chr在 [0,255] 之外会失败,请使用 1.9.x - 2.1.x 便携式替代品:
[22] pry(main)> "\\u0221".ord.chr\nRangeError: 545 out of char range\nfrom (pry):2:in \'chr\'\n[23] pry(main)> x = "\\u0221".unpack(\'U\')[0]\n=> 545\n[24] pry(main)> [x].pack(\'U\')\n=> "\xc8\xa1"\n[25] pry(main)>\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
75578 次 |
| 最近记录: |