mysql — Как преобразовать строку ‘010101010’ в настоящую двоичную строку в переполнении стека

Я хочу хранить IP-адреса в MySQL VARBINARY(16), У меня есть двоичный адрес в виде строки '01001010010100101001010010100101',

Когда я вставляю это в MySQL. Я понимаю, что это не будет преобразовано автоматически.

После поиска руководства по PHP я удивляюсь, что для этого нет функции.

Нужна ваша помощь в том, как преобразовать двоичную строку в VARBINARY,

1

Решение

В PHP вы можете использовать bindec а также long2ip преобразовать двоичную строку в адрес IPv4:

BinDec — Возвращает десятичный эквивалент двоичного числа, представленного аргументом binary_string.

long2ip — Преобразует длинный целочисленный адрес в строку в стандартном точечном формате (IPv4).

$ip_as_int = bindec('01001010010100101001010010100101');
$ipv4 = long2ip ( $ip_as_int );
echo $ipv4;

74.82.148.165
0

Другие решения

Спасибо вам всем! Но я думаю, что нашел лучшее решение: кто-то опубликовал на странице справки по PHP 6 лет назад:

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'));
?>
0

Вы можете сделать это, комбинируя функции 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 Строка может быть легко вставлена ​​в VARBINARY(16) столбец с использованием UPDATE или же INSERT,

-1
По вопросам рекламы [email protected]