jsoncpp json压缩转换字符串写法

背景

自己用jsoncpp已经几年了,一直都用 toStyledString来转换字符串,但这种格式化字符串,但如果用来传递数据,那么有许多多余数据,所以我一直想找到压缩的字符串,网上找了一些关键词基本都没有找到,突然有一天我直接看一下jsoncpp的源代码。

过程

  1. 查看toStyledString 代码
    
    std::string 
    Value::toStyledString() const
    {
    StyledWriter writer;
    return writer.write( *this );
    }
题外话:用vscode看代码还是蛮舒服的
jsoncpp 定义styledWriter ,然后我发现他有一个FastWriter

class JSON_API FastWriter : public Writer
{
public:
FastWriter();
virtual ~FastWriter(){}
void enableYAMLCompatibility();
public:
virtual std::string write( const Value &root );
private:
void writeValue( const Value &value );

  std::string document_;
  bool yamlCompatiblityEnabled_;

};

然后看了一下write就是我想要的压缩的字符串。

## 使用

Json::Value root;
root["id"] = "test";
root["name"] = "fish";
FastWriter fast_writer;
std::string result = fast_writer.write(root);


## 总结
jsoncpp 我用几年前的老版本,看github 貌似重写了,不过目前自己够用,新不代表就好。。
jsoncpp 我的用版本不支持 uint_64,我只能用std::string 来代替

vs2019 c++开发软件独运行[运行库文件抽取]

背景

用vs2019 c++开发软件,发行版本需要运行库,因为别的电脑不一定安装运行库,所以要特别处理

方案

  1. 编译的exe,c++运行库设置MT(静态模式),代码集成在你的exe中
    1. 导致exe变大
    2. 其他第三方库可能冲突【可能第三方库需要改变编译模式】,常见冲突在这里
    3. 存在多份运行库代码,增大安装包体积
    4. 简单
  2. 需要动态库DLL 放在exe执行目录
    1. 需要复制多个DLL,所以要知道依赖哪些库
  3. 安装运行库
    1. 增加安装包体积
    2. 安装运行库万一冲突,还可能失败【对于阉割系统,太多麻烦的事情】
    3. 增加安装时间

      选择

      主流方案都选择第二种

      常见需要复制文件,打开vs2019,然后跳出任务管理器,找到对应进程,然后打开所在的目录


目录跳到IDE这一层

进行搜索
vcruntime140.dll
msvcp140.dll
ucrtbase.dll
api-ms-win-crt-conio-l1-1-0.dll 打开这个位置所有api-全部复制出来,懒得一个一个找。

基本大部分项目足够,如果软件还报错,他会提示,你自己慢慢复制就可以了,其他的版本vs也是这么慢慢查找。

备注

一定要放在exe同级目录,因为window搜索动态目录是这样子(非系统DLL优先级是当前目录最大)。
vs2019 多了好多api,貌似2015以后微软优化运行库,我看了一下文档,没有看出什么特别的地方,现在只记得它进行优化。。。

POCO c++ 库 string to utf8 string

背景

POCO 是一款全面的c++开发框架,基本设计大部分常见使用功能,但没有直接std::string to utf8 string代码,网上找了好久找到(有Unicode std::wstring 转换utf8 std::string)

代码

Poco::Windows936Encoding cp936;
Poco::UTF8Encoding utf8;
Poco::TextConverter converter(cp936, utf8);
std::string src = "你好";
std::string dst;
converter.convert(src, dst);

说明

Windows936Encoding 包含gbk,所以可以用来转换中文到utf8 std::string, 这个东西我是从github 上找到有关的问题,所以记录一下,方便窄字节字符串转换成utf8编码。主要还是c++ 基础库太不够用了,学术太重,不够落地,导致c++ 一个好用的网络库都要用第三方的,或者自己封装。对于自己开发,什么都要自己,对新手太不够友好了,所以建议c++ 用通用第三方库,加快开发速度,降低门槛。或者换其他的语言,没有必要浪费时间在一些跟产品没有关系的东西上。因为语言就是为了解决某种需求,而不是为了编程而编程。