CLX C++ Libraries
Home >> hexdump

Overview

hexdump は,文字列を 16 進数で出力するための関数です.入出力イテレータ, およびプレフィックスを指定します.プレフィックスとは,それぞれの文字(の 16 進数表記)の直前に出力される文字列を指します.

入力に関しては,入力イテレータの他に入力ストリーム,文字列を指定することもできます. 入力ストリーム,および文字列を指定する関数を使用する場合, プレフィックスが必要ないときには,それを省略することができます.

Example

example_hexdump.cpp

#include <iostream>
#include <iterator>
#include <locale>
#include "clx/hexdump.h"

int main(int argc, char* argv[]) {
    std::ostream_iterator<std::string> out(std::cout, " ");
    
    std::string s = "Hello, world";
    clx::hexdump(s, out);
    std::cout << std::endl;
    
#ifdef CLX_USE_WCHAR
    std::wcout.imbue(std::locale("japanese"));
    std::ostream_iterator<std::wstring, wchar_t> wout(std::wcout, L" ");
    std::wstring ws = L"ハローワールド。This is a test with wchar_t.";
    clx::hexdump(ws, wout);
    std::wcout << std::endl;
#endif
    
    /*
     * InIter/OutIter を引数に指定する場合は,prefix を
     * 省略できない.このインターフェースを使う場合で prefix がない
     * ときは,"" (, or L""),もしくは空の std::string (, or std::wstring)
     * を指定する.
     */
    std::istream_iterator<char> input(std::cin);
    std::istream_iterator<char> last;
    clx::hexdump(input, last, out, "#");
    
    return 0;
}
Result
$ ./test < example_hexdump.cpp 
48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 
30cf 30ed 30fc 30ef 30fc 30eb 30c9 3002 54 68 69 73 20 69 73 20 61 20 74 65 73 
74 20 77 69 74 68 20 77 63 68 61 72 5f 74 2e 
#2f #2a #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d 
#2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d 
#2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d #2d 

・・・(以下略)・・・

Functions

// 入力が iterator の場合
template <class Ch, class Tr, class InIter, class OutIter>
OutIter hexdump(InIter first, InIter last, OutIter dest,
    const std::basic_string<Ch, Tr>& prefix);

template <class CharT, class InIter, class OutIter>
OutIter hexdump(InIter first, InIter last, OutIter dest, const CharT* prefix);

// 入力がストリームの場合
template <class Ch, class Tr, class OutIter>
OutIter hexdump(std::basic_istream<Ch, Tr>& src, OutIter dest,
    const std::basic_string<Ch, Tr>& prefix);

template <class Ch, class Tr, class OutIter>
OutIter hexdump(std::basic_istream<Ch, Tr>& src, OutIter dest, const Ch* prefix);

template <class Ch, class Tr, class OutIter>
OutIter hexdump(std::basic_istream<Ch, Tr>& src, OutIter dest);

// 入力が文字列の場合
template <class Ch, class Tr, class OutIter>
OutIter hexdump(const std::basic_string<Ch, Tr>& src, OutIter dest,
    const std::basic_string<Ch, Tr>& prefix);

template <class Ch, class Tr, class OutIter>
OutIter hexdump(const std::basic_string<Ch, Tr>& src, OutIter dest, const Ch* prefix);

template <class Ch, class Tr, class OutIter>
OutIter hexdump(const std::basic_string<Ch, Tr>& src, OutIter dest);

template <class CharT, class OutIter>
OutIter hexdump(const CharT* src, OutIter dest, const CharT* prefix);

template <class CharT, class OutIter>
OutIter hexdump(const CharT* src, OutIter dest);