c++常用代码积累

crow

crow和flask都是web框架,能够快速搭建web server服务

#include "crow.h"

int main()
{
    crow::SimpleApp app;

    CROW_ROUTE(app, "/")([](){
        return "Hello world";
    });
    CROW_ROUTE(app,"/hello/<int>")
      ([](int count){
       if (count > 100)
       return crow::response(400);
       std::ostringstream os;
       os << count << " bottles of beer!";
       return crow::response(os.str());
       });
    CROW_ROUTE(app, "/params")
       ([](const crow::request& req){
          std::ostringstream os;
          os << "Params: " << req.url_params << "\n\n"; 
          os << "The key 'foo' was " << (req.url_params.get("foo") == nullptr ? "not " : "") << "found.\n";
          if(req.url_params.get("pew") != nullptr) {
              double countD = boost::lexical_cast<double>(req.url_params.get("pew"));
              os << "The value of 'pew' is " <<  countD << '\n';
          }
          auto count = req.url_params.get_list("count");
          os << "The key 'count' contains " << count.size() << " value(s).\n";
          for(const auto& countVal : count) {
              os << " - " << countVal << '\n';
          }
          return crow::response{os.str()};
          }); 

    app.port(18080).multithreaded().run();
}

curl库

#include <stdio.h>
#include <curl/curl.h>
bool getUrl(char *filename)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)  // 返回结果用文件存储
        return false;
    struct curl_slist *headers = NULL;
    headers = curl_slist_append(headers, "Accept: Agent-007");
    curl = curl_easy_init();    // 初始化
    if (curl)
    {
        //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");// 代理
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);// 改协议头
        curl_easy_setopt(curl, CURLOPT_URL,"http://www.baidu.com");
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); //将返回的http头输出到fp指向的文件
        curl_easy_setopt(curl, CURLOPT_HEADERDATA, fp); //将返回的html主体数据输出到fp指向的文件
        res = curl_easy_perform(curl);   // 执行
        if (res != 0) {

            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        fclose(fp);
        return true;
    }
}
bool postUrl(char *filename)
{
    CURL *curl;
    CURLcode res;
    FILE *fp;
    if ((fp = fopen(filename, "w")) == NULL)
        return false;
    curl = curl_easy_init();
    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); // 指定cookie文件
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "&logintype=uid&u=xieyan&psw=xxx86");    // 指定post内容
        //curl_easy_setopt(curl, CURLOPT_PROXY, "10.99.60.201:8080");
        curl_easy_setopt(curl, CURLOPT_URL, " http://mail.sina.com.cn/cgi-bin/login.cgi ");   // 指定url
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }
    fclose(fp);
    return true;
}
int main(void)
{
    getUrl("/tmp/get.html");
    postUrl("/tmp/post.html");
}

struct curl_httppost* post;
struct curl_httpposr* last;
curl_formadd(&post,&last,CURLFROM_COPYNAME,"image_file",CURLFROM_BUFFER,"data"
,CURLFROM_BUFFERPTR,fram_encoder_str.c_str(),CURLFROM_BUFFERLENGTH,
fram_encoder.length(),CURLFROM_END);
curl_formadd(&post,&last,CURLFROM_COPYNAME,"json_str",CURLFROM_BUFFER
,CURLFROM_COPYCONTENTS,json.dump().c_str(),CURLFROM_END);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,write_data_json);
size_t write_data_json(void* ptr,size_t size ,size_t nmeb,void* stream)
{
std::string data((const char*) ptr,(size_t)size*nmeb);
*(std::stringsream *)stream<<data<<endl;
return size*nmeb;

} 

字符乱码解决

int GB2312ToUTF8(char *src,size_t src_len,char *dst,size_t dst_len)
{
    iconv_t cd=iconv_open("utf-8//IGNORE","gb2312//IGNORE");
    if(0==cd)
        return -2;
    memset(dst,0,dst_len)char **temp_src=&src;
    char **tem_dst=&dst;
    if(-1==(int)iconv(cd,temp_src,&src_len,tem_dst,&dst_len))
      return -1;
    iconv_close(cd);
    return 0;
}

md5计算

参考此博客

#include <iostream>
#include <fstream>
#include <string.h>
#include <openssl/md5.h>
 
int main(int argc, char *argv[]) {
    std::string file_path = "/tmp/test.log";
    std::ifstream fin(file_path.c_str(), std::ios::in | std::ios::binary);
    if (fin.fail()) {
        return -1;    
    }
 
    unsigned char md5[MD5_DIGEST_LENGTH];
    MD5_CTX ctx;
    MD5_Init(&ctx);
    std::string line;
    while(getline(fin, line))
    {
        MD5_Update(&ctx, line.c_str(), line.size());
    }       
    MD5_Final(md5, &ctx);
 
    std::string md5_hex;
    const char map[] = "0123456789abcdef";
    for (size_t i = 0; i < MD5_DIGEST_LENGTH; ++i) {
        std::cout << int(md5[i]) << " ";
        md5_hex += map[md5[i] / 16];
        md5_hex += map[md5[i] % 16];
    }
    std::cout << "\n" << md5_hex << std::endl;
    return 0;
}
#include <iostream>
#include <string.h>
#include <openssl/md5.h>
 
int main(int argc, char *argv[]) {
    const char data[] = "1234abcd";
    unsigned char md5[MD5_DIGEST_LENGTH];
 
    // 第一种方式
    MD5(reinterpret_cast<const unsigned char*>(data), strlen(data), md5); //直接产生字符串的MD5
 
    // 第二种方式
    // MD5_CTX ctx;
    // MD5_Init(&ctx); //初始化MD5上下文结构
    // MD5_Update(&ctx, data, strlen(data)); //刷新MD5,将文件连续数据分片放入进行MD5刷新
    // MD5_Final(md5, &ctx); //产生最终的MD5数据
 
    std::string md5_hex;
    const char map[] = "0123456789abcdef";
    for (size_t i = 0; i < MD5_DIGEST_LENGTH; ++i) {
        std::cout << int(md5[i]) << " ";
        md5_hex += map[md5[i] / 16];
        md5_hex += map[md5[i] % 16];
    }
    std::cout << "\n" << md5_hex << std::endl;
    return 0;
}

decode and encode


#include <iostream>
#include <string>
#include <cstring>
#include "base64.h"

std::string Base64::Encode(const unsigned char * str,int bytes) {
    int num = 0,bin = 0,i;
    std::string _encode_result;
    const unsigned char * current;
    current = str;
    while(bytes > 2) {
        _encode_result += _base64_table[current[0] >> 2];
        _encode_result += _base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
        _encode_result += _base64_table[((current[1] & 0x0f) << 2) + (current[2] >> 6)];
        _encode_result += _base64_table[current[2] & 0x3f];

        current += 3;
        bytes -= 3;
    }
    if(bytes > 0)
    {
        _encode_result += _base64_table[current[0] >> 2];
        if(bytes%3 == 1) {
            _encode_result += _base64_table[(current[0] & 0x03) << 4];
            _encode_result += "==";
        } else if(bytes%3 == 2) {
            _encode_result += _base64_table[((current[0] & 0x03) << 4) + (current[1] >> 4)];
            _encode_result += _base64_table[(current[1] & 0x0f) << 2];
            _encode_result += "=";
        }
    }
    return _encode_result;
}
std::string Base64::Decode(const char *str,int length) {
       //解码表
    const char DecodeTable[] =
    {
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1, -2, -2, -1, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -1, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, 62, -2, -2, -2, 63,
        52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -2, -2, -2, -2, -2, -2,
        -2,  0,  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, -2, -2, -2, -2, -2,
        -2, 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, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
        -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2
    };
    int bin = 0,i=0,pos=0;
    std::string _decode_result;
    const char *current = str;
    char ch;
    while( (ch = *current++) != '\0' && length-- > 0 )
    {
        if (ch == base64_pad) {
            if (*current != '=' && (i % 4) == 1) {
                return NULL;
            }
            continue;
        }
        ch = DecodeTable[ch];
        
        if (ch < 0 ) { 
            continue;
        }
        switch(i % 4)
        {
            case 0:
                bin = ch << 2;
                break;
            case 1:
                bin |= ch >> 4;
                _decode_result += bin;
                bin = ( ch & 0x0f ) << 4;
                break;
            case 2:
                bin |= ch >> 2;
                _decode_result += bin;
                bin = ( ch & 0x03 ) << 6;
                break;
            case 3:
                bin |= ch;
                _decode_result += bin;
                break;
        }
        i++;
    }
    return _decode_result;
}
#ifndef BASE_64_H
#define BASE_64_H

class Base64{
private:
    std::string _base64_table;
    static const char base64_pad = '=';public:
    Base64()
    {
        _base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /*这是Base64编码使用的标准字典*/
    }
    
    std::string Encode(const unsigned char * str,int bytes);
    std::string Decode(const char *str,int bytes);
    void Debug(bool open = true);
};
#endif
#include <iostream>
#include "base64.h"

using namespace std;
int main()
{
    unsigned char str[] = "这是一条测试数据:http://img.v.cmcm.com/7dd6e6d7-0c2d-5a58-a072-71f828b94cbc_crop_216x150.jpg";
    string normal,encoded;
    int i,len = sizeof(str)-1;
    Base64 *base = new Base64();
    encoded = base->Encode(str,len);
    cout << "base64 encode : " << encoded << endl;
    len = encoded.length();
    const char * str2 = encoded.c_str();
    normal = base->Decode(str2,len);
    cout << "base64 decode : " << normal <<endl;
    return 0;
}

#crypto 加密
参考位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 徐士良常用的算法程序集c是指他经常使用的一套C语言编写的算法程序集合。C语言作为一种高级编程语言,具有跨平台、高效、灵活等优点,适合用于开发算法程序。 徐士良使用算法程序集c的目的是为了解决各种算法问题,并提供高性能、可靠的解决方案。算法是计算机科学和信息技术的核心,涵盖许多重要的领域,如搜索、排序、图论等。通过使用算法程序集c,徐士良可以更好地应对这些问题,提高算法的效率和准确性。 该算法程序集c主要包含各种常见算法的实现代码,比如:贪心算法、动态规划、回溯算法、分治算法等。徐士良可以根据具体问题的需求,选择合适的算法,并根据程序集中提供的代码进行调用和实现。 使用算法程序集c的好处是可以提高开发效率和程序质量。徐士良不需要从零开始编写算法的具体实现,而是直接调用算法程序集c中的代码,节省了大量的时间和精力。此外,算法程序集c经过多次测试和优化,保证了算法的正确性和性能。 总之,通过使用算法程序集c,徐士良能够更加高效和准确地解决各种算法问题,提高程序的开发质量和效率。这对于他在软件开发、数据分析等领域的工作都具有重要意义。 ### 回答2: 徐士良常用算法程序集C是指一套由徐士良所编写和使用的常用算法程序集合。这个程序集是基于C语言开发的,包含了多种常见算法的实现代码。 徐士良作为一位资深的程序员,长期从事算法研究和程序开发工作。他在不同的项目中经常需要使用各种算法来解决实际问题,因此他逐渐积累了大量的算法实现代码。 这个算法程序集包括了各种常用的算法,如排序算法(如冒泡排序、快速排序、归并排序等)、搜索算法(如线性搜索、二分搜索等)、图算法(如最短路径算法、最小生成树算法等)、动态规划算法、贪心算法等等。徐士良在实际开发中根据具体问题的特点选择合适的算法来解决,以提高程序的效率和优化用户体验。 这个算法程序集不仅包含了算法的实现代码,还包括了详细的注释和解释,使得其他程序员可以更容易地理解和使用这些算法。徐士良经常在技术交流和教学活动中分享自己的算法程序集,帮助其他人更好地掌握和应用算法。 总之,徐士良常用算法程序集C是他在长期编程实践中总结和积累的一套包含多种常用算法的程序集,它能够帮助其他程序员解决各种实际问题,提高程序的效率和性能。 ### 回答3: 徐士良常用的算法程序集C是一套基于C语言编写的算法库,包含了多种常见的算法和数据结构实现。这套程序集主要用于解决各种实际问题,并且具有高效、可靠和灵活的特点。 徐士良常用的算法程序集C涵盖了许多经典的算法,例如排序算法(如冒泡排序、快速排序和归并排序等)、搜索算法(如二分查找、深度优先搜索和广度优先搜索等)、图算法(如最短路径算法和最小生成树算法等)和动态规划算法(如背包问题和最长公共子序列等)等等。 除了常见的算法,徐士良还在这套程序集中实现了一些常用的数据结构,例如线性表(如数组和链表等)、栈、队列、树和图等。这些数据结构可以用于解决各类问题,并且在实际应用中具有广泛的适用性。 通过使用徐士良常用的算法程序集C,开发者可以节省大量的时间和精力,因为这套程序集已经提供了各种常见算法和数据结构的实现,无需从头编写。开发者只需要调用相应的函数,传入参数即可完成相关的任务。这样不仅提高了开发效率,还可以避免重复造轮子的问题。 总而言之,徐士良常用的算法程序集C是一套丰富而实用的算法库,可以帮助开发者解决各种实际问题。无论是排序、搜索、图算法还是常见的数据结构,这套程序集都能提供高效、可靠和灵活的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小涵涵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值