---
name: "ibase64streambuf"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "4.08.06-1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/ibase64streambuf"
---

# ibase64streambuf(3bobcat)

Input Filtering stream buffer doing base64 conversion

## NAME

FBB::IBase64Streambuf - Input Filtering stream buffer doing base64 conversion

## SYNOPSIS

**#include \<bobcat/ibase64streambuf\>**\
 Linking option: *-lbobcat*

## DESCRIPTION

The information made available by **IBase64Streambuf** objects has been subject to base64 encoding or decoding. The information to be converted is made available to **IBase64Streambuf** object via *std::istream* objects.

The *class IBase64Streambuf* is a class template, using a *FBB::CryptType* template non-type parameter. Objects of the class *FBB::IBase64Streambuf\<FBB::ENCRYPT\>* base64 encode the information they receive, objects of the class *FBB::IBase64Streambuf\<FBB::DECRYPT\>* base64 decode the information they receive. See also section **ENUMERATION** below.

## NAMESPACE

**FBB**\
 All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace **FBB**.

## INHERITS FROM

**FBB::IFilterStreambuf**

## MEMBER FUNCTIONS

All members of **FBB::IFilterStreambuf** are available, as **IBase64Streambuf** inherits from this class.

Overloaded move and/or copy assignment operators are not available.

## ENUMERATION

**IBase64Streambuf** objects either base64 encode or decode information. **IBase64Streambuf** objects of the class **FBB::IBase64Streambuf\<FBB::ENCRYPT\>** base64 encode the data they receive, **IBase64Streambuf** objects of the class **FBB::IBase64Streambuf\<FBB::DECRYPT\>** base64 decode the data they receive.

The values *ENCRYPT* and *DECRYPT* are defined in the *enum CryptType*, which is defined in the *FBB* namespace.

## CONSTRUCTOR

- o

  **IBase64Streambuf\<CryptType\>(std::istream &in, size\_t bufSize = 1000)**:\
   This constructor initializes the streambuf.

-

  \- *IBase64Streambuf\<ENCRYPT\>* objects perform base64 encoding;\
   \- *IBase64Streambuf\<DECRYPT\>* objects perform base64 decoding;\
   \- *IBase64Streambuf\<CryptType\>* objects obtain the bytes to encode or decode from *std::istream &in*;\
   \- The *IFilterStreambuf* base class is initialized with a buffer of size *bufSize*, using a lower bound of 100.

-

  The constructor uses a configurable buffer size for reading. Characters that were read into the buffer but are not part of the actual base64 encoded data are unavailable after completing the base64 decrypting. If information beyond the base64 input block should remain available, then specify a buffer size of 1.

Copy- and move constructors are not available.

## EXAMPLE

The example shows the construction of *IBase64Streambuf\<ENCRYPT\>* objects *encode* which are used to initialize a *std::istream* object. The information read from this *istream* is base64 encoded.

*IBase64Streambuf\<DECRYPT\>* objects (*decode* reads base64 encoded information from *std::istream* objects and decodes it again).

The *std::istream din* object is initialized with the *IBase64Streambuf\<DECRYPT\>* object, and its contents is sent to *std::cout*. The information that is presented at *std::cin* and that appears at *std::cout* should be identical.

```
#include <iostream>
#include <istream>
#include <bobcat/ibase64streambuf>
using namespace std;
using namespace FBB;
int main(int argc, char **argv)
{
    switch (argv[1][0])
    {
        case ’e’:
        {
            IBase64Streambuf<ENCRYPT> encode(cin);
            istream ein(&encode);
            cout << ein.rdbuf();
        }
        break;
        case ’d’:
        {
            IBase64Streambuf<DECRYPT> decode(cin);
            istream din(&decode);
            cout << din.rdbuf();
        }
        break;
        case ’b’:
        {
            IBase64Streambuf<ENCRYPT> encode(cin);
            istream ein(&encode);
            IBase64Streambuf<DECRYPT> decode(ein);
            istream din(&decode);
            cout << din.rdbuf();
        }
        break;
        default:
            cout << "Usage: " << argv[0] << " [edb] < infile > outfile\n"
                    "to base64 -e-ncode, -d-ecode or -b-oth\n";
        break;
    }
}
```

## FILES

*bobcat/ibase64streambuf* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md), [**isymcryptstreambuf**(3bobcat)](/isymcryptstreambuf/3bobcat.md), [**ibase64stream**(3bobcat)](/ibase64stream/3bobcat.md), [**ifilterstreambuf**(3bobcat)](/ifilterstreambuf/3bobcat.md), [**ofilterstreambuf**(3bobcat)](/ofilterstreambuf/3bobcat.md), **std::streambuf**.

## BUGS

None reported.

## DISTRIBUTION FILES

- o

  *bobcat\_4.08.06-x.dsc*: detached signature;

- o

  *bobcat\_4.08.06-x.tar.gz*: source archive;

- o

  *bobcat\_4.08.06-x\_i386.changes*: change log;

- o

  *libbobcat1\_4.08.06-x\_\*.deb*: debian package holding the libraries;

- o

  *libbobcat1-dev\_4.08.06-x\_\*.deb*: debian package holding the libraries, headers and manual pages;

- o

  *http://sourceforge.net/projects/bobcat*: public archive location;

## BOBCAT

Bobcat is an acronym of \`Brokken’s Own Base Classes And Templates’.

## COPYRIGHT

This is free software, distributed under the terms of the  GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (**f.b.brokken@rug.nl**).
