加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何将字节数转换为字符串? (数字的字符表示)

发布时间:2020-12-17 03:50:33 所属栏目:百科 来源:网络整理
导读:如何轻松转换数字,例如0x616263,相当于基数10中的6382179,通过将数字除以连续字节成为字符串?所以上面的例子应该转换成’abc’. 我已经尝试过Array.pack,但无法弄清楚如何让它转换为数字中的多个字节,例如[0x616263] .pack(“C *”)返回’c’. 我也尝试过0x
如何轻松转换数字,例如0x616263,相当于基数10中的6382179,通过将数字除以连续字节成为字符串?所以上面的例子应该转换成’abc’.

我已经尝试过Array.pack,但无法弄清楚如何让它转换为数字中的多个字节,例如[0x616263] .pack(“C *”)返回’c’.
我也尝试过0x616263.to_s(256),但是抛出一个ArgumentError:无效的基数.我想它需要某种编码信息?

(注意:像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的答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读