5

我正在使用一个数据库,该数据库具有一堆以前导 0 为前缀的序列号。

所以序列号可能看起来像 00032432 或 56332432。

问题出在 PHP 我不明白八进制转换系统是如何工作的。

一个具体的例子是我正在尝试将所有这些基于整数的数字与字符串进行转换和比较。

是否可以将诸如 00234 之类的八进制转换为诸如“00234”之类的字符串以便我可以比较它?

编辑 - 添加一个具体的例子。我希望能够在串行上运行 str 函数,如下所示。

  $serial = 00032432; // coming from DB

  if(substr($serial, 0, 1) == '0') {

        // do something

   } 
4

5 回答 5

5

当你用 转换时(string) $number,你总是得到一个以十进制为基数的字符串,不管你用八进制模式还是十进制模式写数字都没有关系,一个 int 是一个 int 并且它本身没有一个基数。这是他的字符串表示,必须用一个基础来解释。

您可以通过这种方式获得数字的八进制字符串表示:

$str = base_convert((string) 00032432, 10, 8);

或以十进制代​​表给出数字:

$str = base_convert((string) 13594, 10, 8);    

或者,更简洁但不太清楚:

 $str = base_convert(00032432, 10, 8);
 $str = base_convert(13594, 10, 8);

最后,字符串转换是隐式进行的。这些示例给出了所有结果 $str = "32432"。

base_convert将数字的字符串表示形式从一个基转换为另一个

如果您还想要字符串中的零,您可以用简单的数学添加它们。

希望这可以帮到你。

于 2010-03-22T21:46:48.323 回答
1

要将八进制转换为字符串,请将其强制转换:

$str = (string) 00032432;

您可以使用函数 octdec 和 decoct 在八进制和十进制之间进行转换

<?php
echo octdec('77') . "\n";
echo octdec(decoct(45));
?>

http://uk.php.net/manual/en/function.octdec.php

于 2010-03-22T21:01:31.660 回答
1
$str = sprintf('%o', $octal_value);
于 2015-08-09T13:42:14.187 回答
0
$serial = 00032432; //here you have an octal number
$serial= strval($serial); //now you have a string
if ($serial[0]=="0") {
 //do something
}
于 2010-03-22T21:00:25.573 回答
0

数据库中的所有内容都自动成为字符串。整数是字符串,日期是字符串,狗是字符串。

如果您正在做一些奇怪的事情,请通过以下方式将任何内容转换为字符串:$a = (string) 12;

于 2010-03-22T21:02:37.157 回答