Ruby字节数组转换为十六进制字符串

Python016

Ruby字节数组转换为十六进制字符串,第1张

str = "Ruby"

str.split(//).each {|e|print (e.unpack('H*').to_s + "\n")}

#irb

# 52

# 75

# 62

# 79

# =>["R", "u", "b", "y"]

1,符号字符串,都是ruby中表示文本的方式

他们之间是可以通过to_sym 和 to_s 之间来转换的

:username.to_s

username

'username'.to_sym

:username

2, 相同的符号代表的一定是同一个对象,相同的字符串代表的不一定是同一个对象

这个是最大的区别,符号是不可更改的,字符串是可以修改的、

3,性能上,符号更加占优

正是因为符号不可变,而字符串变量必须具有含有修改其类容的功能,所以系统开销比较大,所以一般遇到不需要修改的文本信息时,建议使用符号。

好了 首先是第一步转成16进制: icon = "22 12 41 2 1 8 43 211 42"# =>"22 12 41 2 1 8 43 211 42" icon.split.map {|i| i.to_i.to_s(16) }# =>["16", "c", "29", "2", "1", "8", "2b", "d3", "2a"] 然后是你说的格式化(不太明白你的意思,不知道是不是个位数前面要补0的意思): icon.split.map {|i| i.to_i.to_s(16) }.map { |s| s.size == 1 ? s.insert(0, "0") : s}# =>["16", "0c", "29", "02", "01", "08", "2b", "d3", "2a"] 最后拼起来: icon.split.map {|i| i.to_i.to_s(16) }.map { |s| s.size == 1 ? s.insert(0, "0") : s}.join=>"160c290201082bd32a"