打印

[问题求助] 如何把任意字符转16进制?

如何把任意字符转16进制?

string = "1234ab"
chars=string.scan(/../)
chars.each {|char| print char.to_i.to_s(16)," " }

学了三天ruby,尝试写字符串转16进制,结果写到这再也写不下去了,这个代码有很多问题呀。
一是只能两位两位的取,二是碰到字符都转成0了,转数字没问题。谁来改进一下?

TOP

print char.to_i.to_s(16)
-->
print char.to_i(16).to_s(16)

两位两位的取可能是scan(/../), 你打了两个.了
--------------------------------------
碰到不确定的方法, 你可以用ri查一下它的用法, 如:
ri String.to_i

[ 本帖最后由 5swords 于 2008-4-11 15:50 编辑 ]

TOP

多谢楼上。但你描述的不是我要的

 我对vbs较熟,像vbs字符串转16进制函数是下边这样的。
Function Str2Hex(ByVal strHex)
Dim sHex
For i = 1 To Len(strHex)
 sHex = sHex & Hex(Asc(Mid(strHex,i,1)))
Next
Str2Hex = sHex
End Function

“abcd”会转为61626364
现在我想如何用ruby做到
ruby单个字母转换可以用puts ?a.to_i.to_s(16)来表示,这样a就转为61了。我想一下转一串,只是这样的一个想法。

[ 本帖最后由 lcx 于 2008-4-11 16:27 编辑 ]

TOP



string = "abcd"
0.upto(string.size-1) {|i| print string[i].to_s(16)}


[ 本帖最后由 5swords 于 2008-4-11 16:46 编辑 ]

TOP

多谢老大

ruby单个字母转换可以用puts ?a.to_i.to_s(16)来表示,这样a就转为61了。我想一下转一串,好比一下转abcd,转成61626364。

TOP

哈哈,多谢5swords,我明白了。哎,学习时间太短,很多东东不知。以后就跟着5swords老大混了。

TOP

我也刚学, 相互学习.

刚才那个函数名Str2Hex让我搞混了. 这和16进制太没关系了.

TOP



  class String
    def to_s16
      str_16 = ""
      self.each_byte {|b| str_16 += b.to_s(16)}
      return str_16
    end
  end
  
  puts  "abc".to_s16


TOP

bbschat的正解.
本帖最近评分记录
  • rubylee R币 +3 说的对 2008-4-15 17:31

TOP

再反转一下,嘿嘿
string = "61626364"
chars=string.scan(/../)
chars.each {|char| print char.to_i(16).chr}

TOP

2008-11-23 22:57 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61