编码字节的数据成数字成数、字节、数据

2023-09-11 01:49:34 作者:菊花微微痒

有一个共同的方法来连接code和德code的任意数据,因此EN codeD最终结果由数字只是 - 像base64_en code,但不信

虚拟例如:

  $ EN codeD = numbers_en code(玛丽有只小羊羔);

回声$ EN codeD; //输出例如12238433742239423742322(虚构的结果)

$日codeD = numbers_de code(12238433742239423742322);

回声$日codeD; //输出玛丽有只小羊羔
 

解决方案

您可以把(单字节字符)的字符串作为基础-256连接codeD数,其中\ x00的重presents 0 ,(空格,即,\ X20)重新presents 32,等等,直到\ XFF,从而重新presents 255

如果在EXCEL里每个单元格的字节数不同,如何使其字节数变成相同 如,全部都是5个字符,全部都是10个字符

一个再presentation只能用数字0-9,可以通过改变再presentation立足10简单地实现

请注意是base64编码实际上不是一个基地换算。的base64断输入到的3个字节(24位)组和不单独对这些基团的基转换。这在基地64 psented有四位很好,因为一些24位可再$ P $(2 ^ 24 = 64 ^ 4)。

这是或多或少什么 el.pescado 的那样 - 他将输入数据转换成8位段然后将数字转化基地10。但是转换,这种方法有一个缺点相对基地64编码 - 它不正确的字节边界对齐。重新present若干具有8位(0-255无符号时),我们需要三个数字中底座10然而,最左边的数字具有比其他信息少。它可以是0,1或2(对于无符号数)。

在底的10位存储日志(10)/日志(2)位。无论你选择的块大小,你永远要能够对齐重presentations与8位字节(在对齐我以前在段落中描述的意义上)。因此,最紧凑的再presentation是一个进制转换(其中你可以看到,如果它是一个基本编码,只有一大截)。

下面是一个例子 bcmath 。

  bcscale(0);
功能base256ToBase10(字符串$字符串){
    //参数是小端
    $结果=0;
    为($ I =的strlen($字符串)-1; $ I> = 0; $我 - ){
        $结果= bcadd($结果,
            bcmul(ORD($字符串[$ i]),bcpow(256,$ I)));
    }
    返回$结果;
}
功能base10ToBase256(字符串$号){
    $结果=;
    $ N = $编号;
    做 {
        $其余= bcmod($ N,256);
        $ N = bcdiv(​​$ N,256);
        。$结果= CHR($余数);
    }而($ N大于0);

    返回$结果;
}
 

有关

  $字符串=玛丽有只小羊羔;
$ base10 = base256ToBase10($字符串);
回声$ base10,\ N的;
$ base256 = base10ToBase256($ base10);
回声$ base256;
 

我们得到

36826012939234118013885831603834892771924668323094861
玛丽有只小羊羔

由于每个数字连接codeS仅日志(10)/日志(2)=〜3.32193 位预期数量往往是的