ruby – 如何将字节数转换为字符串? (数字的字符表示)
如何轻松转换数字,例如0x616263,相当于基数10中的6382179,通过将数字除以连续字节成为字符串?所以上面的例子应该转换成’abc’.
我已经尝试过Array.pack,但无法弄清楚如何让它转换为数字中的多个字节,例如[0x616263] .pack(“C *”)返回’c’. (注意:像N这样的包中的其他数据类型与上面给出的示例一起工作,但仅仅因为它适合4个字节,所以例如[0x616263646566] .pack(“N”)给出了cdef,而不是abcdef) 这个问题与this one模糊地相似,但并非如此.另外,我想弄清楚如何使用“abcde”.unpack(“c *”)从字符串中获取十六进制表示字符串.map {| c | c.to_s(16)}.join(“”),给出’6162636465′.我基本上想要倒退. 我不认为这是X-Y problem,但万一它是 – 我正在尝试将我用RSA解码的数字转换为字符串. 谢谢你的帮助.我对Ruby没有太多经验.我也对Python解决方案感兴趣(为了好玩),但我不知道是否有权为这个问题添加两种独立编程语言的标签. 解决方法
要将单个数字0x00616263转换为3个字符,首先需要做的是将它们分成三个数字:0x00000061,0x00000062和0x00000063.
对于最后一个数字,您想要的十六进制数字已经在正确的位置.但是对于其他两个,你必须使用>>做一个bithift. 16和>>分别为8. 然后,使用按位并删除其他数字: num1 = (0x616263 >> 16) & 0xFF num2 = (0x616263 >> 8) & 0xFF num3 = 0x616263 & 0xFF 对于角色,您可以这样做: char1 = ((0x616263 >> 16) & 0xFF).chr char2 = ((0x616263 >> 8) & 0xFF).chr char3 = (0x616263 & 0xFF).chr 当然,按位操作不是非常Ruby.可能有其他人可能提供的类似Ruby的答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |