2011-10-10 114 views
0

我从GitHub或此功能的任何:红宝石to_bytes反转功能需要

class String 
    def to_bytes 
    (0...self.length/2).map {|i|self[i*2,2].to_i(16)} 
    end 
end 

和我的观点是,我真的不知道是什么,整个事情做,特别是自[某件事]部分,请有人可以帮我扭转这个过程吗?我没有经验,而且我迫切需要将这些数字恢复成字符串。

非常感谢

+0

我会尝试以尽可能简单的英文解释我的方法。 '(0 ... self.length/2)'返回一个字符串长度一半的数字。 ('self'是一个关键字,意味着在像'to_bytes'这样的方法的上下文中,被请求'to_bytes'的字符串。)'map'取数(半个字符串的长度),从中取两个字符该字符串一次,并将每个对转换为十六进制,并将结果放入一个数组中。 – maxenglander

回答

2

我不认为你可以的to_bytes结果可靠地转换回原始字符串。 "a".to_bytes"b".to_bytes都会产生[0]。然而,假设这是不是对你的问题,你的to_bytes方法相反会是这样的:

def reverse_string_to_bytes bytes 
    result = "" 
    bytes.each do |pair| 
    result << pair.to_s(16) 
    end 
end 
+0

我明白了,这些东西几乎没有任何东西,但是当我查看“a”.to_bytes和其他一些示例时,to_bytes会破坏整个输入...仍然想知道为什么有人会这样做,因为我正在修改其他人的代码,但感谢您的时间,我很感激。 – Redrick

-1

好像很多工作要做,无事......

为什么不你只是

"My string".bytes.reverse 
# Or 
def reverse_bytes(str) 
    str.bytes.reverse 
end