char *
encode (const void *buf, size_t len)
{
  /* Ne kadar uzunlukta bir tampon gerektiğini biliyoruz */
  unsigned char *in = (unsigned char *) buf;
  char *out = malloc (6 + ((len + 3) / 4) * 6 + 1);
  char *cp = out, *p;
  /* Uzunluğu kodlayalım. */
  /* `htonl' kullanarak farklı bayt sıralaması kullanan makinelerde
      bile doğru çözümleme yapılmasını garanti edelim.
      `l64a' b bayttan daha kısa bir dizge döndürebilir,
      bu durumda genişliği tamamlamak için boşluğu 0
      karakterleriyle dolduralım.  */
  p = stpcpy (cp, l64a (htonl (len)));
  cp = mempcpy (p, "......", 6 - (p - cp));
  while (len > 3)
    {
      unsigned long int n = *in++;
      n = (n << 8) | *in++;
      n = (n << 8) | *in++;
      n = (n << 8) | *in++;
      len -= 4;
      p = stpcpy (cp, l64a (htonl (n)));
      cp = mempcpy (p, "......", 6 - (p - cp));
    }
  if (len > 0)
    {
      unsigned long int n = *in++;
      if (--len > 0)
        {
          n = (n << 8) | *in++;
          if (--len > 0)
            n = (n << 8) | *in;
        }
      cp = stpcpy (cp, l64a (htonl (n)));
    }
  *cp = '\0';
  return out;
}