gpt4 book ai didi

php - python如何将mysql二进制转换(16)

转载 作者:行者123 更新时间:2023-11-29 00:05:17 26 4
gpt4 key购买 nike

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

对于某些表中条目的公共(public) ID,我使用 binary(16) 字段(我无法更改它,它必须保持这种状态)。

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

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

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

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

欢迎提出任何建议。谢谢。

编辑:如果我将 °•WiCÄ'õ0Iò|–g 从 php 发送到 python 并立即打印它,我得到: – 克

最佳答案

我终于解决了这个问题。

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

我尝试简单地将 0bb09557691443c491f53049f27c9667 从 16 转换为 36,但我得到了 owwwweye1rk04k4cskkw4s08s。不是我真正需要的,但仍然是一个很大的进步,因为它开始看起来像 owwweye1rjnvt3i1d0ib18x3

由于要转换的值很大(精度损失),我应该会出现这种差异,所以我进一步研究并找到了波纹管函数,由 Clifford dot ct at gmail dot 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;
}

?>

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

关于php - python如何将mysql二进制转换(16),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27835089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com