如何在 PHP 中将字符串 '010101010' 转换为真正的二进制字符串
How to convert a string '010101010' into a real binary string, in PHP
我想将 IP 地址存储到 MySQL VARBINARY(16)
中。我将二进制地址作为字符串 '01001010010100101001010010100101'
.
当我把它插入MySQL时。我意识到这不会自动转换。
在搜索 PHP 手册后,我很惊讶没有这个功能。
需要您的帮助,了解如何将二进制字符串转换为 VARBINARY
。
您可以通过组合函数 inet_ntoa
和 conv
来完成此操作。
mysql> select inet_ntoa(conv('01001010010100101001010010100101',2,10));
+----------------------------------------------------------+
| inet_ntoa(conv('01001010010100101001010010100101',2,10)) |
+----------------------------------------------------------+
| 74.82.148.165 |
+----------------------------------------------------------+
1 row in set (0.00 sec)
此外,字符串结果可以转换为BINARY
:
mysql> select CAST(inet_ntoa(conv('01001010010100101001010010100101',2,10)) AS BINARY);
+--------------------------------------------------------------------------+
| CAST(inet_ntoa(conv('01001010010100101001010010100101',2,10)) AS BINARY) |
+--------------------------------------------------------------------------+
| 74.82.148.165 |
+--------------------------------------------------------------------------+
1 row in set (0.00 sec)
此外,这个 BINARY
字符串可以使用 UPDATE
或 INSERT
.
轻松放入 VARBINARY(16)
列
在PHP中,您可以使用bindec
和long2ip
将二进制字符串转换为IPv4地址:
bindec - Returns binary_string 参数表示的二进制数的十进制等效值。
long2ip - 将长整数地址转换为 (IPv4) Internet 标准点分格式的字符串
$ip_as_int = bindec('01001010010100101001010010100101');
$ipv4 = long2ip ( $ip_as_int );
echo $ipv4;
74.82.148.165
谢谢大家!但我认为我找到了更好的解决方案:6 年前有人在 PHP 手册页上发帖:
http://php.net/manual/en/function.pack.php#93085
<?php
function bin2bstr($input)
// Convert a binary expression (e.g., "100111") into a binary-string
{
if (!is_string($input)) return null; // Sanity check
// Pack into a string
return pack('H*', base_convert($input, 2, 16));
}
function bstr2bin($input)
// Binary representation of a binary-string
{
if (!is_string($input)) return null; // Sanity check
// Unpack as a hexadecimal string
$value = unpack('H*', $input);
// Output binary representation
return base_convert($value[1], 16, 2);
}
// Returns string(3) "ABC"
var_dump(bin2bstr('01000001 01000010 01000011'));
// Returns string(24) "010000010100001001000011"
var_dump(bstr2bin('ABC'));
?>
我想将 IP 地址存储到 MySQL VARBINARY(16)
中。我将二进制地址作为字符串 '01001010010100101001010010100101'
.
当我把它插入MySQL时。我意识到这不会自动转换。
在搜索 PHP 手册后,我很惊讶没有这个功能。
需要您的帮助,了解如何将二进制字符串转换为 VARBINARY
。
您可以通过组合函数 inet_ntoa
和 conv
来完成此操作。
mysql> select inet_ntoa(conv('01001010010100101001010010100101',2,10));
+----------------------------------------------------------+
| inet_ntoa(conv('01001010010100101001010010100101',2,10)) |
+----------------------------------------------------------+
| 74.82.148.165 |
+----------------------------------------------------------+
1 row in set (0.00 sec)
此外,字符串结果可以转换为BINARY
:
mysql> select CAST(inet_ntoa(conv('01001010010100101001010010100101',2,10)) AS BINARY);
+--------------------------------------------------------------------------+
| CAST(inet_ntoa(conv('01001010010100101001010010100101',2,10)) AS BINARY) |
+--------------------------------------------------------------------------+
| 74.82.148.165 |
+--------------------------------------------------------------------------+
1 row in set (0.00 sec)
此外,这个 BINARY
字符串可以使用 UPDATE
或 INSERT
.
VARBINARY(16)
列
在PHP中,您可以使用bindec
和long2ip
将二进制字符串转换为IPv4地址:
bindec - Returns binary_string 参数表示的二进制数的十进制等效值。
long2ip - 将长整数地址转换为 (IPv4) Internet 标准点分格式的字符串
$ip_as_int = bindec('01001010010100101001010010100101');
$ipv4 = long2ip ( $ip_as_int );
echo $ipv4;
74.82.148.165
谢谢大家!但我认为我找到了更好的解决方案:6 年前有人在 PHP 手册页上发帖:
http://php.net/manual/en/function.pack.php#93085
<?php
function bin2bstr($input)
// Convert a binary expression (e.g., "100111") into a binary-string
{
if (!is_string($input)) return null; // Sanity check
// Pack into a string
return pack('H*', base_convert($input, 2, 16));
}
function bstr2bin($input)
// Binary representation of a binary-string
{
if (!is_string($input)) return null; // Sanity check
// Unpack as a hexadecimal string
$value = unpack('H*', $input);
// Output binary representation
return base_convert($value[1], 16, 2);
}
// Returns string(3) "ABC"
var_dump(bin2bstr('01000001 01000010 01000011'));
// Returns string(24) "010000010100001001000011"
var_dump(bstr2bin('ABC'));
?>