首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python如何转换mysql二进制文件(16)

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

Stack Overflow用户
提问于 2015-01-08 07:35:42
回答 1查看 139关注 0票数 1

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

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

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

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

当我在php(从db)中获得它时,公共id的值是°•WiCÄ‘õ0Iò|–g,,相同的值显示在SequelPro中。但是php myAdmin在二进制字段上执行十六进制函数,并显示myAdmin。现在,我在php中设法将二进制转换为php myAdmin中显示的值,并且它对所有条目都有效,但我刚刚注意到python进行了另一次转换。当我通过python获得本例中使用的条目时,公共id是owwweye1rjnvt3i1d0ib18x3.

我需要实现的是在php中将从°•WiCÄ‘õ0Iò|–g获得的MySql: MySql转换为python看到的:owwweye1rjnvt3i1d0ib18x3.。php应用程序调用python (不是由我开发的),因此id需要以相同的格式进行成功的调用。

欢迎任何建议。谢谢。

编辑:如果我将°•WiCÄ‘õ0Iò|–g从php发送到python并打印出来,我得到:°•WiCÄ‘õ0Iò|–g

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-08 11:07:09

我终于解决了这个问题。

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

我试过简单地从16岁到36岁的0bb09557691443c491f53049f27c9667,但是我得到了owwweye1rk04k4cskkw4s08s.这并不是我所需要的,但随着它开始看起来像owwweye1rjnvt3i1d0ib18x3.,它又向前迈出了一大步。

这种差异应该是由于要转换的值很大(精度下降)而出现的,因此我进一步研究并找到了Clifford dot在gmail dot 上在php.net网站上编写的下面的函数:

代码语言:javascript
运行
复制
<?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; 
} 

?> 

我不认为其他人会经常遇到这个问题,但如果真的发生,他们还是希望能找到这个问题,而不是像我那样烧掉自己的脑袋:))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27835089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档