simpleini库的介绍和使用(面向业务编程-格式处理)

介绍

simpleini是一个跨平台的ini格式处理库,提供了一些简单的API来读取和写入ini风格的配置文件。它支持ASCII、MBCS和Unicode格式的数据文件。它被明确设计为可移植到任何平台,并已在Windows, WinCE和Linux上进行了测试。使用MIT许可证作为开源和免费发布。

使用实例

simpleini的使用很简单,只需要引入头文件,然后就可以开始用了

#include "SimpleIni.h"

示例代码(main.cpp)如下:

int main() {
// 声明一个CSimpleIniA对象
CSimpleIniA ini;
ini.SetUnicode();
// 加载文件并解析
SI_Error rc = ini.LoadFile("example.ini");
if (rc < 0) {
::std::cout << "error handle" << ::std::endl;
}
// 获取值
const char* pv = nullptr;
pv = ini.GetValue("section", "key", "default");
if (nullptr != pv) {
::std::cout << pv << ::std::endl;
}
// 设置值
ini.SetValue("section", "key", "newvalue");
// 设置完成,重新获取
pv = ini.GetValue("section", "key", "default");
if (nullptr != pv) {
::std::cout << pv << ::std::endl;
}
// 保存到文件
rc = ini.SaveFile("example.ini");
if (rc < 0) {
::std::cout << "error handle" << ::std::endl;
}
}

上面代码非常简单

其实ini文件就是一个section(一个小节)

在这个section里面存储一个 键值对,键值对 的值其实是字符串类型的(所以处理数字的时候要手动转成数字类型)。

ini支持的数据类型不多,所以应用也没那么广泛,一般常用在Windows的软件配置里面

因为ini文件可读性好,而且非常的简单、容易解析

ini文件的注释格式为英文分号开头做单行注释,没有多行注释(可以每行注释加一个;)。例如

[setion]
; 网络信息(network info)
ip = 192.168.1.2
port = 50000

以库的形式添加到项目中

simpleini以库的形式添加到项目中

本文为作者原创文章,转载请注明出处:https://www.cnblogs.com/nbtech/p/use_simpleini_library.html

首先我们下载一下simpleini源代码

mkdir UseSimpleIniProject && cd UseSimpleIniProject
git clone https://github.com/brofield/simpleini.git
vim CMakeLists.txt

输入以下文本

# 下面3行是我们正常一个文件的CMake写法,注意这里LANGUAGES要加一个C,因为simpleini是一个C库
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(ini-test LANGUAGES C CXX)
add_executable(ini_test main.cpp)
# 添加simpleini库,1、包含头文件目录;2、添加库的源文件,声明这个库;3、将这个库链接到上面的目标文件中
include_directories(simpleini)
add_library(simpleini
STATIC
simpleini/ConvertUTF.c
)
target_link_libraries(ini_test simpleini)

然后main.cpp文件就是我们上面那个小节的示例代码

写完之后创建目录并编译

mkdir build && cd build
cmake .. && make

就可以看到编译和链接的过程

[  0%] https://www.cnblogs.com/nbtech/p/use_simpleini_library.html
[ 25%] Building C object CMakeFiles/simpleini.dir/simpleini/ConvertUTF.c.o
[ 50%] Linking C static library libsimpleini.a
[ 50%] Built target simpleini
[ 75%] Building CXX object CMakeFiles/ini_test.dir/main.cpp.o
[100%] Linking CXX executable ini_test
[100%] Built target ini_test

在我们项目中,用CMake添加simpleini库操作如上

如果想改成共享库,只需要把CMakeLists.txt的STATIC改成SHARED即可

交叉编译?

有时候我们希望它可以跨平台,那么只需要在cmake配置的时候指定交叉编译工具即可

cmake -D CMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -D CMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ ..

simpleini库的介绍和使用(面向业务编程-格式处理)的更多相关文章

  1. 前端常用的库和实用技术之JavaScript面向切面编程

    Aspect Oriented Programming(AOP)面向切面编程是一个比较热门的话题. AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程 中的某个步骤或阶段,以 ...

  2. 程序员过关斩将-- 喷一喷坑爹的面向UI编程

    摒弃面向UI编程 为何喷起此次话题,因为前不久和我们首席架构师沟通,谈起程序设计问题,一不小心把UI扯进来,更把那些按照UI来编程的后台工程师也扯了进来.今天特意百度了一下(其实程序员应该去googl ...

  3. OpenCV库文件介绍

    以前都是直接用opencv,都没有仔细研究过,这次把库文件都介绍一下. 1.build和source 当我们安装完opencv中,你会发现在opencv文件夹中有两个文件夹,build和source, ...

  4. Python常用的库简单介绍一下

    Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable ...

  5. ArUco----一个微型现实增强库的介绍及视觉应用(二)

    ArUco----一个微型现实增强库的介绍及视觉应用(二) 一.第一个ArUco的视觉应用 首先介绍第一个视觉应用的Demo,这个应用场景比较简单,下面具体介绍: 1. 应用场景 主线程:通过摄像头检 ...

  6. ArUco----一个微型现实增强库的介绍及视觉应用(一)

    ArUco----一个微型现实增强库的介绍及视觉应用(一) 一.ArUco简介 ArUco是一个开源的微型的现实增强库,目前好像已经集成在OpenCV3.0以上的版本内了,它除了用于现实增强,还很用于 ...

  7. STL学习系列之一——标准模板库STL介绍

    库是一系列程序组件的集合,他们可以在不同的程序中重复使用.C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出.数学计算等功能. 1. STL介绍 标准模板库STL是当今每 ...

  8. c/c++ 标准库 pair 介绍

    标准库 pair 介绍 问题:map里的元素由key和value组成,这个key和value的组合是什么类型呢??? 答案:pair类型 pair介绍: 它是模板 有2个公有成员可供访问. first ...

  9. 【Linux】 Ncures库的介绍与安装

    Ncures库的介绍 ncurses(new curses)是一套编程库,它提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面. ncurses名字中的n意味着“new”,因为它是curse ...

  10. iOS 开源库系列 Aspects核心源码分析---面向切面编程之疯狂的 Aspects

    Aspects的源码学习,我学到的有几下几点 Objective-C Runtime 理解OC的消息分发机制 KVO中的指针交换技术 Block 在内存中的数据结构 const 的修饰区别 block ...

随机推荐

  1. 老生常谈:String s1 = new String("abc") 创建了几个字符串对象及8 种基本类型的包装类和常量池

    将创建 1 或 2 个字符串.如果池中已存在字符串常量"abc",则只会在堆空间创建一个字符串常量"abc".如果池中没有字符串常量"abc" ...

  2. 实时中文语音克隆——开源项目MockingBird体验

    [引子] 在今年大型网络攻防演练前不久,笔者接到一个公司的座机号码来电,上来就问防守准备得怎么样了,哪里还有不足等.等等,这声音不认识,笔者第一反应就是蓝军(Red Team)来进行社会工程攻击,于是 ...

  3. 我眼中的Serverless

    https://cloud.tencent.com/document/product/583 摆脱服务器.存储等底层设备,只上传代码,由云服务器提供服务的触发,维护,调用.

  4. redis 数据库在linux下的安装配置与使用

    linux安装redis 完整步骤(1)安装: 1.获取redis资源 wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压 t ...

  5. win系统常用快捷键查询手册

    win+ctrl+左/右方向键 虚拟桌面切换

  6. 关于jmeter性能测试小记的12345

    jmeter性能测试: linux环境命令:后台启jar包:nohup java -jar *.java &前台启jar包:java -jar 后台执行jmeter命令,打印控制台输出在log ...

  7. 流量运营(pvuv跳出率漏斗abtest)

    AARRR模型 1. 激活: 拉新,对用户来源渠道进行分析,哪些合作.投放渠道对我们产品更合适 2. 注册: 流量激活之后,如果用户只是点进来就走了,也没什么用,合适的产品功能切合用户需求,才会有转化 ...

  8. sql:常用:group by 多个字段

    首先group by 的简单说明:   group by 一般和聚合函数一起使用才有意义,比如 count sum avg等,使用group by的两个要素:   (1) 出现在select后面的字段 ...

  9. mysql之数据类型-第三篇

    mysql数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据.mysql的数据类型分别有整数,浮点数和定点数类型,日期和时间类型,字符串类型和二进制类型等. 整数类型 数值型数据类 ...

  10. TensorFlow架构

    Tensorflow基本信息 Tensorflow所需处理器 CPU,GPU,TPU(Google为AI研发的专用芯片) 平台 Windows,Linux,Android,iOS,Raspberry ...