tonybogdanov / alphabase
PHP的Base-Anything转换
v1.0.1
2021-12-10 10:11 UTC
Requires
- php-64bit: ^7.4
- ext-bcmath: *
- ext-json: *
Requires (Dev)
- phpunit/phpunit: ^9.5
- symfony/var-dumper: ^5.4
This package is auto-updated.
Last update: 2024-09-10 16:07:11 UTC
README
安装
composer require tonybogdanov/alphabase:^1.0
用法
将您想要转换的字符串作为第一个参数传递,输入的字母表(唯一字符的字符串)作为第二个参数,输出字母表作为第三个参数。
转换期望所有输入字符都在输入字母表中找到,并将它们转换为输出字母表中的字符。
如果您的输入字母表包含32个字符,而输出字母表包含64个,您实际上是在从base32转换为base64。
请注意,这里的转换与标准算法(如base64
)无关,因此不能互换。
// qett echo \TonyBogdanov\Alphabase\Converter::convert( 'abacab', 'abc', 'qwerty' ); // abacab echo \TonyBogdanov\Alphabase\Converter::convert( 'qett', 'qwerty', 'abc' );
注意
在不考虑特殊/填充字符的情况下,无法无歧义地在基数之间进行转换。然而,这样做将迫使您使用一组字符作为输入字母表,并在字母表之外添加一个额外的填充字符,这将使得从base256转换成为不可能,因为没有可用的ASCII字符可以作为填充。
为了解决这个问题,该包将假设每个字母表中的第一个字符作为填充字符。当在输入字符串的开头找到填充字符时,它将被直接翻译为输出字母表的填充字符1:1,而不进行任何转换。这对于输入的开始直到第一个出现其他字符之前是有效的。之后,填充字符将像其他字符一样进行转换。
这种效果意味着您将失去像base32到base128这样的转换的压缩能力,所以请记住这一点。
关于这一点的一个好的考虑是始终选择字母表,使得第一个(填充)字符是输入字符串中(至少在开头)最不可能出现的字符。