【发布时间】:2013-06-05 03:42:09
【问题描述】:
我希望“嘿,那里”之类的内容变成,例如,#316583。
我希望将任意长度的字符串“归结”为十六进制颜色。我什至不知从何下手。
我在想,每个字符串的 MD5 散列是不同的 - 但是如何将该散列转换为十六进制颜色数字?
【问题讨论】:
我希望“嘿,那里”之类的内容变成,例如,#316583。
我希望将任意长度的字符串“归结”为十六进制颜色。我什至不知从何下手。
我在想,每个字符串的 MD5 散列是不同的 - 但是如何将该散列转换为十六进制颜色数字?
【问题讨论】:
您可以将 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"
用 MD5 值替换 "asdf".each_byte.inject(:+),你应该很好!
【讨论】:
sum 方法,它可能比.each_byte.inject(:+) 更有用。
你可以只取几个前几位数字:
require 'digest/md5'
color = Digest::MD5.hexdigest('My text')[0..5]
【讨论】:
Digest::MD5.hexdigest('My text')[0, 6],但除此之外,+1。