<?php
require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../includes/functions.php';

$page_title   = 'IP Converter – Convert IPv4 to Decimal, Hex, Binary and more';
$page_desc    = 'Free IP converter: convert IPv4 addresses to decimal, hexadecimal, octal, binary and more formats instantly – on ipcheck.tools.';
$page_current = 'ip-konverter';

$query  = trim(strip_tags($_GET['ip'] ?? ''));
$result = [];
$error  = '';
$own_ip = '';

if (!$query) {
    $ips    = get_visitor_ips();
    $own_ip = $ips['ipv4'] ?? '';
}

if ($query) {
    if (!filter_var($query, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) {
        $error = 'Please enter a valid IPv4 address (e.g. 192.168.1.1).';
    } else {
        $octets   = explode('.', $query);
        $ip_long  = ip2long($query);
        $ip_long_u = sprintf('%u', $ip_long);
        $hex      = implode('.', array_map(fn($o) => strtoupper(sprintf('%02X', $o)), $octets));
        $hex_c    = strtoupper(sprintf('%08X', $ip_long < 0 ? $ip_long + 4294967296 : $ip_long));
        $octal    = implode('.', array_map(fn($o) => sprintf('%04o', $o), $octets));
        $binary   = implode('.', array_map(fn($o) => sprintf('%08b', $o), $octets));
        $inverted = implode('.', array_map(fn($o) => 255 - $o, $octets));
        $result = [
            'ip'       => $query,
            'decimal'  => $ip_long_u,
            'hex'      => $hex,
            'hex_c'    => '0x' . $hex_c,
            'octal'    => $octal,
            'binary'   => $binary,
            'inverted' => $inverted,
            'octets'   => $octets,
        ];
    }
}

require_once __DIR__ . '/header.php';
?>

<div class="hero">
  <div class="hero-label">Tool</div>
  <div class="hero-title">IP Converter</div>
  <div class="hero-sub">Convert IPv4 addresses to decimal, hex, binary and more</div>
  <form method="GET" action="/en/ip-konverter.php">
    <div class="input-group">
      <input class="input-text" type="text" name="ip"
             value="<?= h($query) ?>"
             placeholder="e.g. 192.168.1.1"
             required />
      <button type="submit" class="btn btn-primary">
        <i class="ti ti-arrows-exchange"></i> Convert
      </button>
    </div>
  </form>
  <?php if ($own_ip): ?>
  <div style="margin-top:10px;">
    <a href="/en/ip-konverter.php?ip=<?= urlencode($own_ip) ?>" class="copy-btn" style="font-size:12px;">
      <i class="ti ti-user"></i> My IP (<?= h($own_ip) ?>)
    </a>
  </div>
  <?php endif; ?>
</div>

<div class="wrap">

  <div class="ad-slot"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8287576653347400" data-ad-slot="2715725452" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div>

  <?php if ($error): ?>
    <div class="alert alert-danger"><i class="ti ti-alert-circle"></i><span><?= h($error) ?></span></div>

  <?php elseif ($result): ?>

    <div class="card card-blue">
      <div class="card-title"><i class="ti ti-arrows-exchange"></i> Conversion Results for <?= h($result['ip']) ?></div>

      <div class="data-row">
        <span class="dk">IPv4 (dotted decimal)</span>
        <span class="dv mono blue"><?= h($result['ip']) ?></span>
      </div>
      <div class="data-row">
        <span class="dk">Decimal (32-bit)</span>
        <span class="dv mono"><?= h($result['decimal']) ?></span>
      </div>
      <div class="data-row">
        <span class="dk">Hexadecimal (dotted)</span>
        <span class="dv mono"><?= h($result['hex']) ?></span>
      </div>
      <div class="data-row">
        <span class="dk">Hex (compact)</span>
        <span class="dv mono"><?= h($result['hex_c']) ?></span>
      </div>
      <div class="data-row">
        <span class="dk">Octal</span>
        <span class="dv mono"><?= h($result['octal']) ?></span>
      </div>
      <div class="data-row">
        <span class="dk">Binary representation</span>
        <span class="dv mono" style="font-size:11px; word-break:break-all;"><?= h($result['binary']) ?></span>
      </div>
      <div class="data-row">
        <span class="dk">Inverted (bitwise NOT)</span>
        <span class="dv mono"><?= h($result['inverted']) ?></span>
      </div>
    </div>

    <div class="grid2">
      <div class="card">
        <div class="card-title"><i class="ti ti-binary"></i> Octet Details</div>
        <?php foreach ($result['octets'] as $i => $octet): ?>
        <div class="data-row">
          <span class="dk">Octet <?= $i + 1 ?></span>
          <span class="dv mono" style="font-size:11px;">
            Dec: <strong><?= $octet ?></strong> ·
            Hex: <?= strtoupper(sprintf('%02X', $octet)) ?> ·
            Bin: <?= sprintf('%08b', $octet) ?>
          </span>
        </div>
        <?php endforeach; ?>
      </div>

      <div class="card">
        <div class="card-title"><i class="ti ti-arrow-right"></i> Continue with</div>
        <div style="display:flex; flex-direction:column; gap:8px;">
          <a href="/en/subnet.php?ip=<?= urlencode($result['ip']) ?>&prefix=24" class="btn btn-primary" style="font-size:12px; padding:6px 14px;">
            <i class="ti ti-calculator"></i> Subnet Calculator
          </a>
          <a href="/en/ip-lookup.php?ip=<?= urlencode($result['ip']) ?>" class="btn btn-primary" style="font-size:12px; padding:6px 14px; background:#1e1a3a; border-color:#3d3080; color:var(--purple-dim);">
            <i class="ti ti-world-search"></i> IP Lookup
          </a>
          <a href="/en/blacklist.php?ip=<?= urlencode($result['ip']) ?>" class="btn btn-ghost" style="font-size:12px; padding:6px 14px;">
            <i class="ti ti-shield-search"></i> Blacklist Check
          </a>
        </div>
      </div>
    </div>

  <?php else: ?>
    <div class="alert alert-info">
      <i class="ti ti-info-circle"></i>
      <span>Enter an IPv4 address to convert it to different number formats.</span>
    </div>
  <?php endif; ?>

  <div class="card">
    <div class="card-title"><i class="ti ti-bookmark"></i> Known IP addresses</div>
    <?php foreach ([
      ['192.168.1.1',  'Default Router/Gateway'],
      ['10.0.0.1',     'Private network (Class A)'],
      ['172.16.0.1',   'Private network (Class B)'],
      ['127.0.0.1',    'Localhost / Loopback'],
      ['8.8.8.8',      'Google DNS'],
      ['1.1.1.1',      'Cloudflare DNS'],
      ['255.255.255.0', 'Subnet mask /24'],
      ['0.0.0.0',      'Unspecified address'],
    ] as [$ip, $desc]): ?>
    <div class="data-row">
      <span class="dk"><a href="/en/ip-konverter.php?ip=<?= urlencode($ip) ?>" style="font-family:var(--font-mono); font-size:12px; color:var(--blue-dim);"><?= h($ip) ?></a></span>
      <span class="dv"><?= h($desc) ?></span>
    </div>
    <?php endforeach; ?>
  </div>

  <div class="ad-slot"><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8287576653347400" data-ad-slot="2715725452" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle = window.adsbygoogle || []).push({});</script></div>

  <div class="tools-row">
    <a href="/en/"                class="tool-btn"><i class="ti ti-home"></i><span>My IP</span></a>
    <a href="/en/ip-konverter.php" class="tool-btn current"><i class="ti ti-arrows-exchange"></i><span>IP Converter</span></a>
    <a href="/en/subnet.php"      class="tool-btn"><i class="ti ti-calculator"></i><span>Subnet</span></a>
    <a href="/en/ip-lookup.php"   class="tool-btn"><i class="ti ti-world-search"></i><span>IP Lookup</span></a>
    <a href="/en/ipv4.php"        class="tool-btn"><i class="ti ti-network"></i><span>IPv4 Detail</span></a>
  </div>

  <div class="seo-box">
    <h2>IPv4 address formats</h2>
    <p>An IPv4 address can be represented in different number systems. The familiar <strong>dotted decimal</strong> notation (e.g. 192.168.1.1) is just one of many formats. In networking and programming, <strong>hexadecimal</strong> (e.g. C0.A8.01.01) and <strong>decimal</strong> (32-bit integer) formats are commonly used. The <strong>binary</strong> representation shows the actual bit structure, which is important for understanding subnetting and network masks.</p>
  </div>

<?php require_once __DIR__ . '/footer.php'; ?>
