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

时间:2015-01-08 07:35:43

标签: php python mysql binary hex

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

对于某些表中条目的公共ID,我使用二进制(16)字段(我不能更改它,它必须保持这种方式)。

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

我们以其中一个条目为例。

当我在php(来自数据库)中获取它时,公共ID的值为°•WiCÄ'õ0Iò| -g ,SequelPro中显示相同的值。但是php myAdmin在二进制字段上执行十六进制函数并显示 0bb09557691443c491f53049f27c9667 。现在我在php中管理将二进制文件转换为php myAdmin中显示的值,它适用于所有条目,但我只是注意到python执行了另一次转换。当我通过python获得此示例中使用的条目时,公共ID为 owwweye1rjnvt3i1d0ib18x3

我需要实现的是在php中转换我从MySql获得的内容:°•WiCÄ'õ0Iò| -g 到python看到的内容: owwweye1rjnvt3i1d0ib18x3 。 php应用程序调用python(不是由我开发),因此id需要采用相同的格式才能成功调用。

欢迎任何建议。感谢。

编辑:如果我将°•WiCÄ'õ0Iò| -g 从php发送到python并打印出来,我得到:°WiCÓâ€〜Ãμ0Iò| €“克

1 个答案:

答案 0 :(得分:1)

最后我对此进行了整理。

似乎python转换为base36而不是十六进制,因为我错误地认为。

我尝试过简单地将 0bb09557691443c491f53049f27c9667 从16改为36但我已经 owwweye1rk04k4cskkw4s08s 了。不是我真正需要的东西,但它仍然是一个很大的进步,因为它开始看起来像 owwweye1rjnvt3i1d0ib18x3

我应该出现这种差异,因为要转换的值很大(精度损失),所以我进一步研究并找到了波纹管功能,由 Clifford dot ct写在gmail dot com < / strong>在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; 
} 

?> 

我不认为其他人会经常遇到这个问题,但如果发生这种情况仍然希望他们能够找到这个,而不是像我一样烧掉他们的脑筋:))))