static int run_main(int ac, char* av[]) { namespace po = boost::program_options; try { po::options_description generic("Allowed options"); add(generic)("config-file,c", po::value<std::string>(), "config file name"); add(generic)("help,h", "produce help message"); po::options_description hidden("Hidden options"); hidden.add_options()("input-file", po::value<std::string>(), "input file"); po::options_description cmdline_options; cmdline_options.add(generic).add(hidden); po::options_description config_file_options; config_file_options.add(generic).add(hidden); po::positional_options_description p; p.add("input-file", -1); po::variables_map vm; store(po::command_line_parser(ac, av).options(cmdline_options).positional(p).run(), vm); if (vm.count("config-file")) { Util::Input ifs(vm["config-file"].as<std::string>()); store(parse_config_file(*ifs, config_file_options), vm); notify(vm); } if (vm.count("help")) { std::cout << generic << "\n\n"; std::cout << "Convert FSM (in hypergraph format) to OpenFst text format" << '\n'; return EXIT_FAILURE; } std::string file; if (vm.count("input-file")) { file = vm["input-file"].as<std::string>(); } typedef ViterbiWeightTpl<float> Weight; typedef Hypergraph::ArcTpl<Weight> Arc; IVocabularyPtr pVoc = Vocabulary::createDefaultVocab(); Util::Input in_(file); MutableHypergraph<Arc> hg; hg.setVocabulary(pVoc); parseText(*in_, file, &hg); writeOpenFstFormat(std::cout, hg); assert(hg.checkValid()); } catch (std::exception& e) { std::cerr << e.what() << '\n'; return EXIT_FAILURE; } return EXIT_SUCCESS; }
// 线程函数 UINT threadEncryptFunc(LPVOID lpParam) { CString* arr = (CString*)lpParam; CString cs_fileName = arr[0]; CString cs_savePath = arr[1]; CString cs_key = arr[2]; CT2CA pszCAS_key(cs_key); // 将 TCHAR 转换为 LPCSTR string keyStr(pszCAS_key); // 从 LPCSTR 构造 string CT2CA pszCAS_filename(cs_fileName); string fileName(pszCAS_filename); CT2CA pszCAS_savepath(cs_savePath); string savePath(pszCAS_savepath); Aes aes; ifstream in_(fileName.c_str(), ios::binary); ofstream out_(savePath.c_str(), ios::binary); Byte key[16]; aes.charToByte(key, keyStr.c_str()); // 密钥扩展 Word w[4*(Nr+1)]; aes.KeyExpansion(key, w); bitset<128> data; // 临时存放读取的数据 Byte plain[16]; // 加密矩阵 while(in_.read((char*)&data, sizeof(data))) { aes.divideByte(plain, data); aes.encrypt(plain, w); data = aes.mergeByte(plain); out_.write((char*)&data, sizeof(data)); data.reset(); // 置0 } in_.close(); out_.close(); return 0; }