python如何转换mysql二进制文件(16)

2024-10-03 09:09:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个应用程序一个是用php编写的,一个是用python编写的,它们都使用相同的mysql数据库。你知道吗

对于某些表中条目的public id,我使用了binary(16)字段(我不能更改它,它必须保持这种方式)。你知道吗

问题是python如何转换这个二进制字段?你知道吗

让我们以其中一个条目为例。你知道吗

当我在php中(从db中)得到它时,public id的值是°•WiCÄ'õ0Iò|–g,相同的值显示在sequepro中。但是php myAdmin对二进制字段执行十六进制函数,并显示0bb09557691443c491f53049f27c9667。现在我在php中成功地将二进制文件转换为php myAdmin中显示的值,它可以用于所有条目,但我刚刚注意到python进行了另一个转换。当我通过python获取本例中使用的条目时,public id是owwweye1rjnvt3i1d0ib18x3。你知道吗

我需要实现的是在php中将我从MySql获得的东西转换成python所看到的东西:owwweey1rjnvt3i1d0ib18x3。php应用程序对python应用程序(不是我开发的)进行调用,因此成功调用的id格式必须相同。你知道吗

欢迎任何建议。谢谢。你知道吗

编辑:如果我把°•WiCÄ0Iò|–g从php发送到python,然后直接打印出来,我得到:


Tags: 目的id数据库应用程序db方式mysql二进制
1条回答
网友
1楼 · 发布于 2024-10-03 09:09:52

我终于解决了这个问题。你知道吗

似乎python转换为base36,而不是我错误地认为的hex。你知道吗

我试着简单地把16岁的孩子转换成36岁的孩子,但是我得到了一个很好的答案。这并不是我真正需要的,但它开始看起来像是一个很大的进步。你知道吗

我认为出现这种差异是因为要转换的值太大(精度损失),所以我进一步研究并找到了bellow函数,它是Clifford dot ct在gmail.com上写的php.net网址:

<?php 

function str_baseconvert($str, $frombase=10, $tobase=36) { 
    $str = trim($str); 
    if (intval($frombase) != 10) { 
        $len = strlen($str); 
        $q = 0; 
        for ($i=0; $i<$len; $i++) { 
            $r = base_convert($str[$i], $frombase, 10); 
            $q = bcadd(bcmul($q, $frombase), $r); 
        } 
    } 
    else $q = $str; 

    if (intval($tobase) != 10) { 
        $s = ''; 
        while (bccomp($q, '0', 0) > 0) { 
            $r = intval(bcmod($q, $tobase)); 
            $s = base_convert($r, 10, $tobase) . $s; 
            $q = bcdiv($q, $tobase, 0); 
        } 
    } 
    else $s = $q; 

    return $s; 
} 

?> 

我不认为其他人会经常遇到这个问题,但如果真的发生了,希望他们会发现这一点,而不是像我一样绞尽脑汁:))

相关问题 更多 >