在Ruby中将字符串转换为比特,再加上1个比特并将其转换回ASCII。

4
我正在编写一个Ruby UID生成器,并且需要按顺序生成唯一的ID。这些唯一的ID是长度在3到9个字符之间变化的字符串。
我的目标是:
获取最后生成的标识符,将其转换为位,并将1位加到其中(基本上是+1),然后将结果转换回ASCII码。这样我就可以防止生成两次唯一的ID。
我该如何在Ruby中实现呢?我知道#pack和#unpack方法,但是我无法想出一个方法。

你可以给个例子吗? - Stefan
1个回答

3
您可以使用如下方法:

您可以使用类似以下的方式:

a = "Foobar".unpack("B*")[0].to_i(2)+1

=> 77444424032627

["0" + a.to_s(2)].pack("B*")

=> "Foobas"


1
"Foobar".succ 的等效操作是什么? - Stefan
所需的是:我有一组字符[0-9A-Z],包括数字和大写字母。我想能够从000开始,通过更改最后一位而不是随机选择,一直增加到ZZZZZZZZZ(9个Z)。在Ruby中是否可能实现? - Leon
你需要所有的排列组合吗?那就用这个:a = (0..9).to_a + ("A".."Z").to_a a.permutation(3).to_a - mvidaurre
如果你想要一个基于uid生成后继uid的函数,那么你应该使用succ并在函数中使用一些逻辑来检测数字和字符的变化。请查看以下代码:a =“0A”;(1..(10 ** 2))。each do |m|; puts a; a.succ!; end - mvidaurre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接