PHP 8.x での「基数変換」は、まずデータ契約の問題です。入力はプラットフォームの整数幅に収まる整数なのか、先頭ゼロを保持すべき数字文字列なのか。出力は計算に使うのか、表示専用なのか。最初にこれらを決めれば、無効文字、浮動小数点の近似値、バイト表現を正しい整数変換と取り違えずに済みます。
例には機密情報を使いません。リクエスト、ファイル、データベース由来の文字列は、変換関数へ渡す前にアプリケーションの契約全体に照らして検証してください。
Table of Contents
先に結論
decbin()、decoct()、dechex()はintを受け取り、接頭辞もパディングもない数字文字列を返します。bindec()、octdec()、hexdec()は文字列を受け取ります。結果はint、またはネイティブ整数範囲を超えるとfloatになり得ます。正確な整数が必要なら後者を拒否します。base_convert()は 2〜36 進数を文字列で変換しますが、大きな値では内部の浮動小数点処理により精度を失う可能性があると公式マニュアルが警告しています。- これらの解析関数は無効文字を無視し、PHP 7.4 以降はその入力に非推奨通知を出します。この寛容な挙動に依存せず、変換前に文字列全体を検証します。
- 先頭ゼロ、
0b/0o/0x接頭辞、英字の大小は入力または表示形式であり、数値そのものではありません。方針をインターフェース契約に明記します。
まず実行環境を記録します。開発機の 64 ビット結果を、すべての配備先で当然のものとしてはいけません。
<?php
declare(strict_types=1);
printf(
"PHP %s, native integer width: %d bits%s",
PHP_VERSION,
PHP_INT_SIZE * 8,
PHP_EOL
);
関数選択表
| 目的 | 関数 | 入力 | 出力 | 主な境界 |
|---|---|---|---|---|
| 10進整数から2進テキスト | decbin() | int | string | ネイティブ int 幅。負数はプラットフォーム依存の符号なしビットパターンになる |
| 10進整数から8進テキスト | decoct() | int | string | ネイティブ int 幅。0o は付かない |
| 10進整数から16進テキスト | dechex() | int | string | ネイティブ int 幅。負数は符号なしとして扱われ、出力は小文字 |
| 2・8・16進テキストから値 | bindec() / octdec() / hexdec() | string | int|float | 無効文字を無視。大きな値は不正確な float になり得る |
| 2〜36進テキスト間の変換 | base_convert() | string と2つの基数 | string | 大きな値は精度を失う可能性。出力英字は小文字 |
表示形式と数値は分けて保持します。たとえば "0011" と "11" はどちらも2進数の3ですが、前者には「表示幅4」という情報もあります。
手順1:文字列の契約を定義して検証する
次の検証器は、意図的に狭い契約を採用します。2〜36進の符号なし・接頭辞なし ASCII 数字だけを受け入れます。空白を自動除去せず、区切り文字やアンダースコアも認めません。先頭ゼロは有効です。製品で符号や接頭辞が必要なら、外側の形式全体を検証してから明示的に取り除き、変換関数に推測させないでください。
<?php
declare(strict_types=1);
function validBaseDigits(string $digits, int $base): bool
{
if ($digits === '' || $base < 2 || $base > 36) {
return false;
}
$alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
foreach (str_split(strtolower($digits)) as $digit) {
$value = strpos($alphabet, $digit);
if ($value === false || $value >= $base) {
return false;
}
}
return true;
}
この検証器は 000110 と 00FF を受け入れますが、0b1010、0x2f、空白、負号、宣言した基数の範囲外の数字を拒否します。0b、0o、0x は PHP ソースコードの整数リテラル構文です。任意の入力文字列でもその接頭辞を受け入れるべきだという意味ではありません。
HTTP から来る10進入力も文字列として扱います。FILTER_VALIDATE_INT はネイティブ範囲内の10進整数を検証できますが、有効な 0 と失敗を区別するため厳密比較を使い、空白、プラス記号、先頭ゼロを許すかを先に決めます。先にキャストしてはいけません。PHP の「先頭が数値の文字列」に対する変換規則は入力検証器ではありません。
$rawDecimal = '47';
if ($rawDecimal !== trim($rawDecimal)) {
throw new InvalidArgumentException('Whitespace is not allowed');
}
$decimal = filter_var($rawDecimal, FILTER_VALIDATE_INT);
if (!is_int($decimal)) {
throw new RangeException('Expected a native-range decimal integer');
}
手順2:ネイティブ整数範囲内だけで変換する
2・8・16進文字列は、まず文字列全体を検証し、その後で戻り値の型を確認します。結果が float なら、int へ戻すキャストをしてはいけません。すでに精度が失われている可能性があります。
function toNativeInt(string $digits, int $base): int
{
if (!validBaseDigits($digits, $base)) {
throw new InvalidArgumentException('Invalid digits for the declared base');
}
$value = match ($base) {
2 => bindec($digits),
8 => octdec($digits),
16 => hexdec($digits),
default => throw new InvalidArgumentException(
'Use this native-integer helper only with base 2, 8, or 16'
),
};
if (!is_int($value)) {
throw new RangeException('Value exceeds the native integer range');
}
return $value;
}
逆方向では、呼び出し側がすでに本物の int を保持している必要があります。
$value = 47;
$binary = decbin($value); // 101111
$octal = decoct($value); // 57
$hex = dechex($value); // 2f
PHP の int は符号付きで、幅はプラットフォーム依存です。PHP_INT_SIZE、PHP_INT_MIN、PHP_INT_MAX を確認してください。PHP に符号なし int 型はありません。decbin(-1)、decoct(-1)、dechex(-1) は -1 ではなく、プラットフォーム幅の符号なしビットパターンを生成します。インターフェースが符号付きテキストを必要とするなら符号を別に処理し、絶対値が同じ符号付き int に収まらない PHP_INT_MIN をガードします。
function signedHex(int $value): string
{
if ($value === PHP_INT_MIN) {
throw new RangeException('PHP_INT_MIN needs arbitrary-length handling');
}
return $value < 0
? '-' . dechex(-$value)
: dechex($value);
}
これらの整数関数へ浮動小数点数を渡さず、範囲外の文字列を一度 float にして戻すこともしないでください。範囲外の浮動小数点数から int への変換結果は未定義になり得ます。
手順3:表示書式と値を分離する
decbin()、decoct()、dechex()、base_convert() は先頭ゼロを保持せず、基数接頭辞も付加しません。dechex() と base_convert() の英字出力は小文字です。固定幅、大文字、接頭辞が必要なら、変換成功後に別途書式化します。
$numericValue = 47;
$digits = strtoupper(str_pad(dechex($numericValue), 4, '0', STR_PAD_LEFT));
$display = '0x' . $digits;
echo $display; // 0x002F
$numericValue は 47 のままで、$digits と $display は表示文字列です。固定幅は上限も意味します。結果が指定幅より長ければエラーにするか幅を広げ、左側を切り捨ててはいけません。
手順4:base_convert() を慎重に使う
base_convert($num, $fromBase, $toBase) は2〜36進を扱い、入力英字の大小を区別せず、出力は小文字です。検証済みで大きさを制限した識別子や表示変換には適しますが、任意長の正確性が必要な数には適しません。
$source = '00ff';
if (!validBaseDigits($source, 16)) {
throw new InvalidArgumentException('Invalid hexadecimal digits');
}
$binary = base_convert($source, 16, 2);
echo $binary; // 11111111
結果は数値を表すため、先頭ゼロは消えます。00ff の4文字幅に業務上の意味があるなら、幅または正規化した元の表示値を別に保持します。
bin2hex() を基数変換と混同しない
bin2hex() は文字列のバイトを16進表現にします。文字 "10" を2進数の2として解釈する関数ではありません。
echo bin2hex('10'); // 3130: ASCII bytes for "10"
echo base_convert('10', 2, 16); // 2: binary digits to hexadecimal
ファイル、プロトコルフレーム、暗号用バイト列なら bin2hex() が適切な場合があります。0 と 1 からなる数字テキストなら、検証してから基数変換します。
ネイティブ幅を超える場合:明示的な任意長経路を使う
値が PHP_INT_MAX を超え得る場合、bindec()、octdec()、hexdec() の float 結果を正確だと扱わず、base_convert() にも依存しません。PHP の GMP 拡張は任意長整数を提供します。gmp_init() は明示した基数で文字列を解析し、gmp_strval() は目的の基数で文字列を出力します。
if (!extension_loaded('gmp')) {
throw new RuntimeException('GMP extension is required');
}
$large = gmp_init('ffffffffffffffff', 16);
$decimal = gmp_strval($large, 10);
echo $decimal; // 18446744073709551615
ここでも入力基数に対応する規則で文字列を事前検証します。基数を明示すれば、自動接頭辞判定の曖昧さを避けられます。このワークステーションには GMP が入っていないため、このブロックはローカル実行せず、PHP 公式 API と記載された境界に対する静的確認のみを行いました。
BCMath は任意精度の10進文字列演算拡張であり、2〜36進全般に対する base_convert() の代替ではありません。業務値が検証済みの10進文字列で、10進演算が必要な場合だけ選び、float を経由させないでください。
Web 出力の安全性
検証済みの変換結果であっても、HTML コンテキストのエンコードが完了したことにはなりません。制御された基数の数字は ASCII 文字だけですが、ほかの動的内容と連結する場合を含め、テンプレート境界では一貫して htmlspecialchars() を呼びます。
header('Content-Type: text/html; charset=UTF-8');
$rendered = strtoupper(str_pad(dechex(47), 4, '0', STR_PAD_LEFT));
echo '<output>'
. htmlspecialchars($rendered, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8')
. '</output>';
未検証の生入力をエラーページへ反映したり、公開ログへ書いたりしないでください。URL、JavaScript、CSS、HTTP ヘッダーにはそれぞれのコンテキスト処理が必要で、htmlspecialchars() だけでは対応できません。
再現可能な PHP 8.x CLI アサーション
次の自己完結テストは、無効化されている可能性がある assert() に依存しません。対応中の PHP 8.x CLI で保存・実行すると、不一致時に例外を投げてゼロ以外で終了します。
<?php
declare(strict_types=1);
function expectSame(mixed $expected, mixed $actual): void
{
if ($expected !== $actual) {
throw new RuntimeException('Conversion assertion failed');
}
}
function validBaseDigits(string $digits, int $base): bool
{
if ($digits === '' || $base < 2 || $base > 36) {
return false;
}
$alphabet = '0123456789abcdefghijklmnopqrstuvwxyz';
foreach (str_split(strtolower($digits)) as $digit) {
$value = strpos($alphabet, $digit);
if ($value === false || $value >= $base) {
return false;
}
}
return true;
}
function toNativeInt(string $digits, int $base): int
{
if (!validBaseDigits($digits, $base)) {
throw new InvalidArgumentException('Invalid digits for the declared base');
}
$value = match ($base) {
2 => bindec($digits),
8 => octdec($digits),
16 => hexdec($digits),
default => throw new InvalidArgumentException(
'Use this native-integer helper only with base 2, 8, or 16'
),
};
if (!is_int($value)) {
throw new RangeException('Value exceeds the native integer range');
}
return $value;
}
function signedHex(int $value): string
{
if ($value === PHP_INT_MIN) {
throw new RangeException('PHP_INT_MIN needs arbitrary-length handling');
}
return $value < 0
? '-' . dechex(-$value)
: dechex($value);
}
expectSame('1100', decbin(12));
expectSame('410', decoct(264));
expectSame('2f', dechex(47));
expectSame(6, toNativeInt('000110', 2));
expectSame(15, toNativeInt('17', 8));
expectSame(47, toNativeInt('2F', 16));
expectSame(false, validBaseDigits('0b1010', 2));
expectSame(false, validBaseDigits('12oops', 10));
expectSame('11111111', base_convert('00ff', 16, 2));
expectSame('002F', strtoupper(str_pad(dechex(47), 4, '0', STR_PAD_LEFT)));
expectSame('-2f', signedHex(-47));
expectSame(str_repeat('1', PHP_INT_SIZE * 8), decbin(-1));
expectSame('3130', bin2hex('10'));
expectSame('2', base_convert('10', 2, 16));
echo "PHP ", PHP_VERSION, "; ", PHP_INT_SIZE * 8, "-bit; tests passed", PHP_EOL;
このテストが対象とするのはネイティブ整数経路です。範囲外入力が float や base_convert() を経ても正確であることは証明しません。本番コードでは、実際に許可する最小値、最大値、長さ、出力幅の境界例も追加してください。
公開前チェックリスト
- 入力がネイティブ整数、数字文字列、任意長整数のどれかを特定する。
- 各フィールドで許可する基数、符号、接頭辞、大小文字、長さ、先頭ゼロ方針を固定する。
- 変換前に文字列全体を検証し、無効文字が無視される挙動に依存しない。
bindec()、octdec()、hexdec()の結果にis_int()を適用する。- 範囲外の値を
float経由にせず、任意長の正確性が必要な場面でbase_convert()を使わない。 - 数値、数字文字列、表示用の接頭辞・パディングを分けて保存する。
- 負数では符号付きテキストと固定幅ビットパターンのどちらかを明示的に選び、幅を記録する。
- 対象 PHP バージョンと配備先の 32/64 ビット環境で境界テストを実行する。
- HTML テンプレート境界でエンコードし、未処理の生入力をログに残さない。
公式資料
- PHP の整数型とプラットフォーム幅
- decbin()、decoct()、dechex()
- bindec()、octdec()、hexdec()
- base_convert()
- PHP の数値文字列と FILTER_VALIDATE_INT
- bin2hex() と str_pad()
- GMP:gmp_init() と gmp_strval()
- BCMath の任意精度10進演算
- htmlspecialchars()
歴史的原文アーカイブ(来歴確認専用)
source_exportの可視本文を完全かつ逐語的に収録しています。削除、改稿、空白正規化、プライバシーまたは安全上の墨消しはありません。2011 年当時の PHP バージョンと説明を反映しており、整数幅の上限、寛容な解析、関数の用法は現在の推奨ではありません。区画全体が不活性なプレーンテキストであり、実行したり本番へコピーしたりしないでください。
PHP函数篇详解十进制、二进制、八进制和十六进制互相转换函数说明
主要掌握各进制转换的方法,以应用于实际开发。
Table of Contents
Toggle
- [十进制(decimal system)转换函数说明](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E8%BF%9B%E5%88%B6%EF%BC%88decimal_system%EF%BC%89%E8%BD%AC%E6%8D%A2%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E)
- [十进制转二进制 decbin() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E4%BA%8C%E8%BF%9B%E5%88%B6_decbin_%E5%87%BD%E6%95%B0)
- [十进制转八进制 decoct() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%85%AB%E8%BF%9B%E5%88%B6_decoct_%E5%87%BD%E6%95%B0)
- [十进制转十六进制 dechex() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6_dechex_%E5%87%BD%E6%95%B0)
- [二进制(binary system)转换函数说明](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E4%BA%8C%E8%BF%9B%E5%88%B6%EF%BC%88binary_system%EF%BC%89%E8%BD%AC%E6%8D%A2%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E)
- [二进制转十制进 bindec() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E4%BA%8C%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E5%88%B6%E8%BF%9B_bindec_%E5%87%BD%E6%95%B0)
- [二进制转十六制进 bin2hex() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E4%BA%8C%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E5%85%AD%E5%88%B6%E8%BF%9B_bin2hex_%E5%87%BD%E6%95%B0)
- [八进制(octal system)转换函数说明](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%85%AB%E8%BF%9B%E5%88%B6%EF%BC%88octal_system%EF%BC%89%E8%BD%AC%E6%8D%A2%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E)
- [八进制转十进制 octdec() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%85%AB%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E8%BF%9B%E5%88%B6_octdec_%E5%87%BD%E6%95%B0)
- [十六进制(hexadecimal)转换函数说明](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%EF%BC%88hexadecimal%EF%BC%89%E8%BD%AC%E6%8D%A2%E5%87%BD%E6%95%B0%E8%AF%B4%E6%98%8E)
- [十六进制转十进制 hexdec()函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E8%BD%AC%E5%8D%81%E8%BF%9B%E5%88%B6_hexdec%E5%87%BD%E6%95%B0)
- [任意进制转换 base_convert() 函数](https://blog.lazying.art/en/html/computer_internet/php/736/php%e5%87%bd%e6%95%b0%e7%af%87%e8%af%a6%e8%a7%a3%e5%8d%81%e8%bf%9b%e5%88%b6%e3%80%81%e4%ba%8c%e8%bf%9b%e5%88%b6%e3%80%81%e5%85%ab%e8%bf%9b%e5%88%b6%e5%92%8c%e5%8d%81%e5%85%ad%e8%bf%9b%e5%88%b6.html/#%E4%BB%BB%E6%84%8F%E8%BF%9B%E5%88%B6%E8%BD%AC%E6%8D%A2_base_convert_%E5%87%BD%E6%95%B0)
## 十进制(decimal system)转换函数说明
### 十进制转二进制 decbin() 函数
如下实例
1. echo decbin(12); //输出 1100
2. echo decbin(26); //输出 11010
**decbin**
(PHP 3, PHP 4, PHP 5)
decbin — 十进制转换为二进制
说明
string decbin ( int number )
返回一字符串,包含有给定 number 参数的二进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 32 个 1 的字符串。
### 十进制转八进制 decoct() 函数
1. echo decoct(15); //输出 17
2. echo decoct(264); //输出 410
**decoct**
(PHP 3, PHP 4, PHP 5)
decoct — 十进制转换为八进制
说明
string decoct ( int number )
返回一字符串,包含有给定 number 参数的八进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 “37777777777”。
### 十进制转十六进制 dechex() 函数
1. echo dechex(10); //输出 a
2. echo dechex(47); //输出 2f
**dechex**
(PHP 3, PHP 4, PHP 5)
dechex — 十进制转换为十六进制
说明
string dechex ( int number )
返回一字符串,包含有给定 number 参数的十六进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 “ffffffff”。
## 二进制(binary system)转换函数说明
### 二进制转十制进 bindec() 函数
1. echo bindec(‘110011’); //输出 51
2. echo bindec(‘000110011’); //输出 51
3. echo bindec(‘111’); //输出 7
**bindec**
(PHP 3, PHP 4, PHP 5)
bindec — 二进制转换为十进制
说明
number bindec ( string binary_string )
返回 binary_string 参数所表示的二进制数的十进制等价值。
bindec() 将一个二进制数转换成 integer。可转换的最大的数为 31 位 1 或者说十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数值,这种情况下,它会返回 float 类型。
### 二进制转十六制进 bin2hex() 函数
1. $binary = “11111001”;
2. $hex = dechex(bindec($binary));
3. echo $hex;//输出f9
**bin2hex**
(PHP 3 >= 3.0.9, PHP 4, PHP 5)
bin2hex — 将二进制数据转换成十六进制表示
说明
string bin2hex ( string str )
返回 ASCII 字符串,为参数 str 的十六进制表示。转换使用字节方式,高四位字节优先。
## 八进制(octal system)转换函数说明
### 八进制转十进制 octdec() 函数
1. echo octdec(’77’); //输出 63
2. echo octdec(decoct(45)); //输出 45
**octdec**
(PHP 3, PHP 4, PHP 5)
octdec — 八进制转换为十进制
说明
number octdec ( string octal_string )
返回 octal_string 参数所表示的八进制数的十进制等值。可转换的最大的数值为 17777777777 或十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。
## 十六进制(hexadecimal)转换函数说明
### 十六进制转十进制 hexdec()函数
1. var_dump(hexdec(“See”));
2. var_dump(hexdec(“ee”));
3. // both print “int(238)”
4. var_dump(hexdec(“that”)); // print “int(10)”
5. var_dump(hexdec(“a0”)); // print “int(160)”
**hexdec**
(PHP 3, PHP 4, PHP 5)
hexdec — 十六进制转换为十进制
说明
number hexdec ( string hex_string )
返回与 hex_string 参数所表示的十六进制数等值的的十进制数。hexdec() 将一个十六进制字符串转换为十进制数。所能转换的最大数值为 7fffffff,即十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。
hexdec() 将遇到的所有非十六进制字符替换成 0。这样,所有左边的零都被忽略,但右边的零会计入值中。
## 任意进制转换 base_convert() 函数
1. $hexadecimal = ‘A37334’;
2. echo base_convert($hexadecimal, 16, 2);//输出 101000110111001100110100
**base_convert**
(PHP 3 >= 3.0.6, PHP 4, PHP 5)
base_convert — 在任意进制之间转换数字
说明
string base_convert ( string number, int frombase, int tobase )
返回一字符串,包含 number 以 tobase 进制的表示。number 本身的进制由 frombase 指定。frombase 和 tobase 都只能在 2 和 36 之间(包括 2 和 36)。高于十进制的数字用字母 a-z 表示,例如 a 表示 10,b 表示 11 以及 z 表示 35。
