gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:24:26 26 4
gpt4 key购买 nike

如何轻松转换数字,例如0x616263,相当于以 10 为基数的 6382179,通过将数字分成连续的字节来转换成字符串?所以上面的例子应该转换成'abc'

我试验过 Array.pack但无法弄清楚如何让它转换数字中的一个以上字节,例如[0x616263].pack("C*") 返回 'c'。我也尝试过 0x616263.to_s(256),但会引发 ArgumentError:基数无效。我想它需要某种编码信息?

(注意:pack 中的其他数据类型,如 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 个字符,您首先真正需要做的是将它们分成三个数字:0x000000610x000000620x00000063

对于最后一个数字,您想要的十六进制数字已经在正确的位置。但是对于另外两个,您必须分别使用 >> 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 的答案。

关于ruby - 如何将数字中的字节转换为字符串? (数字的字符表示),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42993763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com