当前位置: 首页 > news >正文

热门手机网站uc浏览器在线网页

热门手机网站,uc浏览器在线网页,买了域名之后怎么建设网站,wordpress文章底部文字广告文章目录 专栏导读1. json 认识1.1 JSON 数据结构的特点 2. jsoncpp库认识3. json实现序列化案例4. json实现反序列化案例5. bundle文件压缩库认识6. bundle库实现文件压缩案例7.bundle库实现文件解压缩案例8.httplib库认识9. httplib库搭建简单服务器案例10. httplib库搭建简单… 文章目录 专栏导读1. json 认识1.1 JSON 数据结构的特点 2. jsoncpp库认识3. json实现序列化案例4. json实现反序列化案例5. bundle文件压缩库认识6. bundle库实现文件压缩案例7.bundle库实现文件解压缩案例8.httplib库认识9. httplib库搭建简单服务器案例10. httplib库搭建简单客户端案例 专栏导读 作者简介花想云 在读本科生一枚C/C领域新星创作者新星计划导师阿里云专家博主CSDN内容合伙人…致力于 C/C、Linux 学习。 专栏简介本文收录于 C项目——云备份 相关专栏推荐C语言初阶系列、C语言进阶系列 、C系列、数据结构与算法、Linux 项目Gitee链接https://gitee.com/li-yuanjiu/cloud-backup 1. json 认识 JSONJavaScript Object Notation是一种轻量级的数据交换格式用于在不同应用程序之间传递和存储数据。它的设计目标是易于阅读和编写同时也易于解析和生成。JSON采用文本格式通常以.json文件扩展名存储以及一种键-值对的结构其中数据以一种易于理解的方式表示适合机器和人类阅读。 1.1 JSON 数据结构的特点 键-值对JSON 数据由键-值对组成键和值之间使用冒号分隔键-值对之间使用逗号分隔。键通常是字符串值可以是字符串、数字、布尔值、数组、对象、null等。 {name: 小明,age: 30,isStudent: true }对象对象是一种包含键-值对的数据结构用大括号{}表示。对象的键是唯一的。 {person: {name: Alice,age: 25} }数组数组是一种有序的值的集合用方括号[]表示。数组可以包含各种数据类型包括对象和其他数组。 {fruits: [apple, banana, orange] }字符串字符串是以双引号括起来的文本。字符串可以包含任何字符包括特殊字符和转义序列。 {message: Hello, World! }数字数字可以是整数或浮点数不需要引号包围。 {price: 19.99 }布尔值表示真或假的值可以是true或false。 {isSunny: true }null表示空值或缺失值。 {data: null }2. jsoncpp库认识 jsoncpp 库用于实现 json 格式的序列化和反序列化完成将多个数据对象组织成为 json 格式字符串以及将 json 格式字符串解析得到多个数据对象的功能。 这其中主要借助三个类以及其对应的少量成员函数完成 json数据对象类 //Json数据对象类 class Json::Value{Value operator(const Value other); //Value重载了[]和因此所有的赋值和获取数据都可以通过Value operator[](const std::string key);//简单的方式完成 val[姓名] 小明;Value operator[](const char* key);Value removeMember(const char* key);//移除元素const Value operator[](ArrayIndex index) const; //val[成绩][0]Value append(const Value value);//添加数组元素val[成绩].append(88);ArrayIndex size() const;//获取数组元素个数 val[成绩].size();std::string asString() const;//转string string name val[name].asString();const char* asCString() const;//转char* char *name val[name].asCString();Int asInt() const;//转int int age val[age].asInt();float asFloat() const;//转floatbool asBool() const;//转 bool };json序列化类 //json序列化类低版本用这个更简单 class JSON_API Writer {virtual std::string write(const Value root) 0; } class JSON_API FastWriter : public Writer { virtual std::string write(const Value root); } class JSON_API StyledWriter : public Writer {virtual std::string write(const Value root); } //json序列化类高版本推荐如果用低版本的接口可能会有警告 class JSON_API StreamWriter {virtual int write(Value const root, std::ostream* sout) 0; } class JSON_API StreamWriterBuilder : public StreamWriter::Factory {virtual StreamWriter* newStreamWriter() const; }json反序列化类 //json反序列化类低版本用起来更简单 class JSON_API Reader { bool parse(const std::string document, Value root, bool collectComments true); } //json反序列化类高版本更推荐 class JSON_API CharReader {virtual bool parse(char const* beginDoc, char const* endDoc,Value* root, std::string* errs) 0; } class JSON_API CharReaderBuilder : public CharReader::Factory {virtual CharReader* newCharReader() const; }3. json实现序列化案例 /*json 序列化 */ #include iostream #include sstream #include memory #include jsoncpp/json/json.hint main() {const char* name 小明;int age 18;float score[] {77.5, 88, 93.6}; // 语数英成绩Json::Value root; // 定义一个Value对象root[name] name;root[age] age;root[成绩].append(score[0]); // 在数组中插入数据用append函数root[成绩].append(score[1]);root[成绩].append(score[2]);// std::cout root std::endl;Json::StreamWriterBuilder swb;std::unique_ptrJson::StreamWriter sw(swb.newStreamWriter());std::stringstream ss;sw-write(root, ss);std::cout ss.str() std::endl;return 0; }$ g -o json_example json_example.cpp -ljsoncpp $ ./json_example运行结果 4. json实现反序列化案例 /*json 反序列化 */ #include iostream #include string #include memory #include jsoncpp/json/json.hint main() {std::string str R({姓名:小黑, 年龄:19, 成绩:[58.5, 44, 20]});Json::Value root;Json::CharReaderBuilder crb;std::unique_ptrJson::CharReader cr(crb.newCharReader());std::string err;bool ret cr-parse(str.c_str(), str.c_str() str.size(), root, err);if(ret false){std::cout parse error: err std::endl;return -1; }std::cout root[姓名].asString() std::endl;std::cout root[年龄].asInt() std::endl;int sz root[成绩].size();for(int i 0; i sz; i){std::cout root[成绩][i] std::endl; }return 0; }$ g -o json_example2 json_example2.cpp -ljsoncpp $ ./json_example2运行结果 5. bundle文件压缩库认识 Bundle 是一个嵌入式压缩库支持23种压缩算法和2种存档格式。使用的时候只需要加入两个文件 bundle.h 和 bundle.cpp 即可。 以下是常用接口 namespace bundle {// low level API (raw pointers)bool is_packed( *ptr, len );bool is_unpacked( *ptr, len );unsigned type_of( *ptr, len );size_t len( *ptr, len );size_t zlen( *ptr, len );const void *zptr( *ptr, len );bool pack( unsigned Q, *in, len, *out, zlen );bool unpack( unsigned Q, *in, len, *out, zlen );// medium level API, templates (in-place)bool is_packed( T );bool is_unpacked( T );unsigned type_of( T );size_t len( T );size_t zlen( T );const void *zptr( T );bool unpack( T , T );bool pack( unsigned Q, T , T );// high level API, templates (copy)T pack( unsigned Q, T );T unpack( T ); }6. bundle库实现文件压缩案例 #include iostream #include fstream #include string #include bundle.hint main(int argc, char* argv[]) {std::cout argv[1] 是原始文件路径名称\n;std::cout argv[2] 是压缩包名称\n;if(argc 3) return -1;std::string ifilename argv[1];std::string ofilename argv[2];std::ifstream ifs;ifs.open(ifilename, std::ios::binary); // 打开原始文件ifs.seekg(0, std::ios::end); // 跳转读写位置到末尾size_t fsize ifs.tellg(); // 获取末尾偏移量--文件长度ifs.seekg(0, std::ios::beg); // 跳转到文件起始std::string body;body.resize(fsize); // 调整body大小为文件大小ifs.read(body[0], fsize); // 读取文件所有数据到bodystd::string packed bundle::pack(bundle::LZIP, body); // 以lzip格式压缩文件数据std::ofstream ofs;ofs.open(ofilename, std::ios::binary); // 打开压缩包文件ofs.write(packed[0], packed.size()); // 将压缩后的数据写入压缩包文件ifs.close();ofs.close();return 0; }$ g -o compress compress.cpp bundle.cpp -lpthread $ ./compress bundle.cpp bundle.cpp.lz运行结果 7.bundle库实现文件解压缩案例 #include iostream #include fstream #include string #include bundle.hint main(int argc, char* argv[]) {if(argc 3){printf(argv[1]是压缩包名称\n);printf(argv[2]是解压缩后的文件\n);return -1;}std::string ifilename argv[1]; // 压缩包名std::string ofilename argv[2]; // 解压缩后文件名std::ifstream ifs;ifs.open(ifilename, std::ios::binary); // 打开压缩文件ifs.seekg(0, std::ios::end); // 跳转到读写位置到文件末尾size_t fsize ifs.tellg(); // 获取末尾偏移量--获取文件长度ifs.seekg(0, std::ios::beg); // 返回到文件起始std::string body;body.resize(fsize); // 调整body大小为文件大小ifs.read(body[0], fsize); // 读取压缩文件所有内容到bodyifs.close();std::string unpacked bundle::unpack(body); // 进行解压缩将解压缩后的数据保存到unpack中std::ofstream ofs;ofs.open(ofilename, std::ios::binary); // 打开文件ofs.write(unpacked[0], unpacked.size()); // 将解压缩后的数据写入文件ofs.close();return 0; }$ g -o uncompress uncompress.cpp bundle.cpp -lpthread $ ./uncompress bundle.cpp.lz bundle.tmp $ 计算两个文件的md5值看是否完全相同 $ md5 bundle.cpp $ md5sum bundle.tmp运行结果 8.httplib库认识 httplib 库一个 C11 单文件头的跨平台 HTTP/HTTPS 库。安装起来非常容易。只需包含 httplib.h 在你的代码中即可。 httplib 库实际上是用于搭建一个简单的 http 服务器或者客户端的库这种第三方网络库可以让我们免去搭建服务器或客户端的时间把更多的精力投入到具体的业务处理中提高开发效率。 常用接口如下 namespace httplib{struct MultipartFormData {std::string name;std::string content;std::string filename;std::string content_type;};using MultipartFormDataItems std::vectorMultipartFormData;struct Request {std::string method;std::string path;Headers headers;std::string body;// for serverstd::string version;Params params;MultipartFormDataMap files;Ranges ranges;bool has_header(const char *key) const;std::string get_header_value(const char *key, size_t id 0) const;void set_header(const char *key, const char *val);bool has_file(const char *key) const;MultipartFormData get_file_value(const char *key) const;};struct Response {std::string version;int status -1;std::string reason;Headers headers;std::string body;std::string location; // Redirect locationvoid set_header(const char *key, const char *val);void set_content(const std::string s, const char *content_type);}; class Server {using Handler std::functionvoid(const Request , Response );using Handlers std::vectorstd::pairstd::regex, Handler;std::functionTaskQueue *(void) new_task_queue;Server Get(const std::string pattern, Handler handler); Server Post(const std::string pattern, Handler handler);Server Put(const std::string pattern, Handler handler); Server Patch(const std::string pattern, Handler handler); Server Delete(const std::string pattern, Handler handler); Server Options(const std::string pattern, Handler handler);bool listen(const char *host, int port, int socket_flags 0); }; class Client {Client(const std::string host, int port);Result Get(const char *path, const Headers headers);Result Post(const char *path, const char *body, size_t content_length,const char *content_type);Result Post(const char *path, const MultipartFormDataItems items);} }9. httplib库搭建简单服务器案例 #include iostream #include httplib.h using namespace httplib; void Hello(const Request req, Response rsp) { rsp.set_content(Hello World!, text/plain);rsp.status 200; // 设置状态码 } void Numbers(const Request req, Response rsp) { auto num req.matches[1]; // 0里边保存的是整体path往后下标中保存的是捕捉的数据rsp.set_content(num, text/plain);rsp.status 200; } void Multipart(const Request req, Response rsp) {auto ret req.has_file(file);if(ret false){std::cout not file upload\n;rsp.status 400;return;}const auto file req.get_file_value(file);rsp.body.clear();rsp.body file.filename; // 文件名称rsp.body \n;rsp.body file.content; // 文件内容rsp.set_header(Content-Type, text/plain);rsp.status 200;return; } int main() {httplib::Server sever; // 实例化Sever对象用于搭建服务器sever.Get(/hi, Hello); // 注册一个针对/hi的Get请求的处理函数映射关系sever.Get(R(/numbers/(\d)), Numbers);sever.Post(/multipart, Multipart);sever.listen(0.0.0.0, 9090);return 0; }$ g -o server httpserver.cpp -stdc14 -lpthread $ ./server运行结果 注意测试时一定要关闭防火墙设置安全组开放端口。 10. httplib库搭建简单客户端案例 #include httplib.h #define SERVER_IP 你的服务器IP地址 #define SERVER_PORT 9090int main() {httplib::Client client(SERVER_IP, SERVER_PORT); // 实例化client对象用于搭建客户端// 以下仅为上传文件的测试其他两个测试在浏览器上进行httplib::MultipartFormData item;item.name file; // 该file匹配的就是服务器程序代码中的fileitem.filename hello.txt; // 文件名item.content Hello World!; // 文件内容item.content_type text/plain;httplib::MultipartFormDataItems items;items.push_back(item);auto res client.Post(/multipart, items);std::cout res-status std::endl;std::cout res-body std::endl;return 0; } $ g -o client httpclient.cpp -stdc14 -lpthread $ ./client运行结果
http://www.pierceye.com/news/1643/

相关文章:

  • wordpress申请网站吗招标代理网站建设
  • 汕头网站设计浩森宇特国内做免费的视频网站
  • 建设网站费用记什么科目美食网站建设规划书
  • jsp网站开发详解下载代码编程教学入门
  • 网站后台不能粘贴文章建设厅官网查询
  • 怎么学习做网站磁力链网站怎么做的
  • 像做游戏一样编程的网站营销团队名字
  • 广州地铁站路线图seo免费软件
  • 公益网站建设grace 7 wordpress
  • 五金模具技术支持 东莞网站建设最优惠的网站优化
  • 阿里云服务器创建多个网站吗西安建设工程信息网平台变更
  • 教育网页设计网站网站被黑了怎么办
  • 太原网站制作优化seo网站关键词分割
  • 阿里云网站全部清空怎么做营销战略和营销策略
  • 浅灰色做网站背景黄骅市15天天气预报
  • 保定企业建站系统模板长治网站制作哪家好
  • 淘宝客个人网站建设公众号怎么进入
  • zhon中国建设会计学会网站网站备案都审核什么资料
  • 手机电脑网站 建站程序网站title怎么写
  • 发展速度迅猛 具有丰富的网站建设经验淄博网站制作定制技术
  • 合肥网站制作开发上海集团网站建设公司
  • 网站建设公司推广广告语网站建设叁金手指花总9
  • 网站建设 长安镇建网站的详细技术
  • 在电脑上做网站的软件揭阳网站制作找哪家
  • 工装设计案例网站iosapp开发用什么语言
  • 单位网站建设情况zhihu网站建设
  • 做网站用哪个软件写比较好招牌设计创意门头
  • 做网站的原理免费商城
  • 新郑网站优化买正品东西哪个网最好
  • 能在线做初中题的网站建站 报价