Chinaunix

标题: Perl中大整数与长字符串的转换问题 [打印本页]

作者: UltimateSniper    时间: 2013-07-23 22:54
标题: Perl中大整数与长字符串的转换问题
有个问题想的不是太清楚,希望大家能帮着讨论一下,梳理一下思路,都学习学习:

假设我有一个字符串变量$testBytes = "0x00" x 16;
我希望能将$testBytes像个整型变量一样,每次加1,即:变成"0x00"x15 . "0x01"、"0x00"x15 . "0x02"、"0x00"x15 . "0x03" …… 一直到"0x11"x16 。
不知道想要实现这样的效果有没有什么好的方法?
(我自己现在的思路就是:用个Math::BigInt类型的整型变量$var从0开始增加,然后,每次对$var模256,用chr()函数将取模得到的结果变为字符,就这样循环,将各个字符连接起来,最后将得到的字符串逆序,就是我想要的结果。)

表达得有点乱,还希望能有人耐心的看看,指导一下,谢谢了!

作者: zhlong8    时间: 2013-07-23 23:27
你确定要生成 2^64 个字符串?
64位的 Perl 可以用 sprintf '%0#16x", $_ for 0 .. 2**64-1;
作者: UltimateSniper    时间: 2013-07-23 23:50
回复 2# zhlong8


    不好意思,我又想了想,问题该是 $testBytes是一个16字节的字符串,我希望$testBytes的值能够从 0-2^128 这个区间中的数,转换为一个包含 16 个字符的字符串。

    例如:0 代表的就是 $testBytes = "0x00"x16
           (2^128 - 1)表示 $testBytes = "0xFF"x16

不知道这样你能不能看明白,不过你上面给出的那个例子我会去研究一下看看。
作者: UltimateSniper    时间: 2013-07-23 23:56
回复 2# zhlong8


    即:16个字节,128位的字符串 $testBytes,我想将其128位二进制数依次加一,然后将这个数以每8位为一块,将每块用chr()转换成一个字符,16个字符连起来就是新的 $testBytes 了。
作者: zhlong8    时间: 2013-07-24 08:55
回复 3# UltimateSniper


    我的电脑一秒钟做500万次跑完 2^64 要十万年……
作者: UltimateSniper    时间: 2013-07-24 09:25
回复 5# zhlong8


    好吧,其实我本不想这么做的,但是,因为要多线程,所以必须这样分段(与我这的具体模式有关),导致了这种问题,我现在很恼火是否要继续这样下去。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2