5

我想要像“嘿那里”这样的东西变成,例如,#316583

我希望将任何长度的字符串“归结为”,可以说是十六进制颜色。我什至不知从哪里开始。

我在想,每个字符串的 MD5 散列是不同的 - 但是如何将该散列转换为十六进制颜色数字?

4

2 回答 2

17

你可以只取几个前几位数字:

require 'digest/md5'
color = Digest::MD5.hexdigest('My text')[0..5]
于 2013-06-09T08:16:59.157 回答
2

您可以将 md5 值修改为 2^24 并将结果打印为十六进制,并在其前加上 # 符号。

这是一个没有 MD5 的坏方法,它在短字符串上给出非常低的值,但显示了这个想法:

sprintf("#%06x", ("asdf".sum % (256*256*256)))

输出:

ruby-1.9.2-p290 :032 > sprintf("#%06x", ("asdf".sum % (256*256*256)))
 => "#00019e" 

替换"asdf".each_byte.inject(:+)为 MD5 值,你应该很好!

于 2013-06-09T08:16:24.777 回答