Blame view

3rdparty/boost_1_81_0/libs/crc/crc_example.cpp 1.91 KB
977ed18d   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
  //  Boost CRC example program file  ------------------------------------------//
  
  //  Copyright 2003 Daryle Walker.  Use, modification, and distribution are
  //  subject to the Boost Software License, Version 1.0.  (See accompanying file
  //  LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)
  
  //  See <http://www.boost.org/libs/crc/> for the library's home page.
  
  //  Revision History
  //  17 Jun 2003  Initial version (Daryle Walker)
  
  #include <boost/crc.hpp>  // for boost::crc_32_type
  
  #include <cstdlib>    // for EXIT_SUCCESS, EXIT_FAILURE
  #include <exception>  // for std::exception
  #include <fstream>    // for std::ifstream
  #include <ios>        // for std::ios_base, etc.
  #include <iostream>   // for std::cerr, std::cout
  #include <ostream>    // for std::endl
  
  
  // Redefine this to change to processing buffer size
  #ifndef PRIVATE_BUFFER_SIZE
  #define PRIVATE_BUFFER_SIZE  1024
  #endif
  
  // Global objects
  std::streamsize const  buffer_size = PRIVATE_BUFFER_SIZE;
  
  
  // Main program
  int
  main
  (
      int           argc,
      char const *  argv[]
  )
  try
  {
      boost::crc_32_type  result;
  
      for ( int i = 1 ; i < argc ; ++i )
      {
          std::ifstream  ifs( argv[i], std::ios_base::binary );
  
          if ( ifs )
          {
              do
              {
                  char  buffer[ buffer_size ];
  
                  ifs.read( buffer, buffer_size );
                  result.process_bytes( buffer, ifs.gcount() );
              } while ( ifs );
          }
          else
          {
              std::cerr << "Failed to open file '" << argv[i] << "'."
               << std::endl;
          }
      }
  
      std::cout << std::hex << std::uppercase << result.checksum() << std::endl;
      return EXIT_SUCCESS;
  }
  catch ( std::exception &e )
  {
      std::cerr << "Found an exception with '" << e.what() << "'." << std::endl;
      return EXIT_FAILURE;
  }
  catch ( ... )
  {
      std::cerr << "Found an unknown exception." << std::endl;
      return EXIT_FAILURE;
  }