PHP等效于Java中的GetLeastSignificanBits()&GetMostSignificanBits?

PHP等效于Java中的GetLeastSignificanBits()&GetMostSignificanBits?,java,php,uuid,guid,Java,Php,Uuid,Guid,我在PHP中使用UUID,我必须查询一个数据库,该数据库在两个单独的列中存储UUID的最高有效位和最低有效位。我发现,这似乎正是我在PHP中需要的,但我不知道如何转换代码,而且我对字节操作从来都不擅长 在PHP中,getLeastSignificantBits和getMostSignificantBits的等效函数是什么?谢谢 编辑:示例数据(如果有帮助): UUID: b33ac8a9-ae45-4120-bb6e-7537e271808e …应转换为 Upper Bits: -553188

我在PHP中使用UUID,我必须查询一个数据库,该数据库在两个单独的列中存储UUID的最高有效位和最低有效位。我发现,这似乎正是我在PHP中需要的,但我不知道如何转换代码,而且我对字节操作从来都不擅长

在PHP中,getLeastSignificantBits和getMostSignificantBits的等效函数是什么?谢谢

编辑:示例数据(如果有帮助):

UUID: b33ac8a9-ae45-4120-bb6e-7537e271808e
…应转换为

Upper Bits: -5531888561172430560
Lower Bits: -4940882858296115058

您只需要两个库和bcmath扩展, 使用

作曲家需要ramsey/uuid moontoast/math

使用Ramsey\UUID\UUID解析UUID:

你会得到:

Upper Bits: 12914855512537121056
Lower Bits: 13505861215413436558
Upper Bits 10-base: 12914855512537121056
Upper Bits hex: b33ac8a9ae454120
使用这些方法,您可以获得Moontoast\Math\BigNumber对象,从而可以获取其值或转换为不同的基:

$higher = $uuid->getMostSignificantBits();
echo 'Upper Bits 10-base: ' . $higher->getValue() . "\n";
echo 'Upper Bits hex: ' . $higher->convertToBase(16) . "\n";
你会得到:

Upper Bits: 12914855512537121056
Lower Bits: 13505861215413436558
Upper Bits 10-base: 12914855512537121056
Upper Bits hex: b33ac8a9ae454120

您还可以使用$uuid->GetMostSignificanBitshex和$uuid->GetLeastSignificanBitshex,它们已经转换为十六进制。

如果您不想使用其他答案中提到的库,下面的代码将与支持64位整数的php版本一起使用。这就是Java的UUID.fromString方法所做的

<?php
PHP_INT_MAX > 2147483647 or exit("Need php version which supports 64-bit integer\n");

$uuid = $argv[1];
$components = explode("-", $uuid);
count($components) == 5 or exit("$uuid is not a valid UUID\n");

$msb = intval($components[0], 16);
$msb <<= 16;
$msb |= intval($components[1], 16);
$msb <<= 16;
$msb |= intval($components[2], 16);

$lsb = intval($components[3], 16);
$lsb <<= 48;
$lsb |= intval($components[4], 16);

echo "UUID: $uuid\n";
echo "MSB: $msb\n";
echo "LSB: $lsb\n";
?>
这可能对你有帮助。
对于最高有效位和最低有效位。

我认为您可以自己实现它。为什么不?@user202729我在问题中解释了为什么我在编写实现时遇到困难。我无法在这个项目中使用Composer。如果没有它,我如何设置此库?您可以在本地使用Composer,然后只上载文件。另一种方法是,您可以从GitHub手动下载,然后安装autoloader。我接受了您的答案,因为这是第一个正确回答我的问题的答案,但另一种答案提供了一种转换方法,开销小得多,我给予了奖励。鉴于简单性和小代码食物打印,我将奖励给您。谢谢你的帮助!不要只链接到资源,您应该在SO答案中添加相关代码,以防将来特定链接中断或资源移动。