Intelligence without ambition is a bird without wings.

2015-07-08
Crypto++使用

编译

g++ *.c -lcryptopp -lpthread
阅读此文

2015-07-07
注册表运行vbs

wscript.exe E:\OS\Windows\bin\mklink.vbs "%1"
阅读此文

2015-07-01
mysql-常用命令行参数

  • –skip-column-names

    结果列不输出列名

阅读此文

2015-07-01
jsoncpp

主要的类

| 类名 | 作用 |
|————–+————————————————————————————————————————————————|
| Json::Value | 可以表示里所有的类型 |
| Json::Reader | 将json文件流或字符串解析到Json::Value, 主要函数有Parse |
| Json::Writer | 与Json::Reader相反,将Json::Value转化成字符串流,注意它的两个子类:Json::FastWriter和Json::StyleWriter,分别输出不带格式的json和带格式的json。 |

常用API

  • 判断json中是否有指定成员

    bool isMember("id")
    
  • 取指定值,若不存在,则使用默认值

    Value get(ArrayIndex index, const Value &defaultValue)
    

    注意

  • 文件需要是UTF-8不带BOM!

  • 下标访问时,若该元素不存在,则返回值为json::Value::nullValue

  • json::Value::nullValue转换为空字符串""(\X00)

阅读此文

2015-07-01
C++11-枚举类型转换

boost::lexcial_cast

##优点

  • 可直接与string互转
  • 方法一致,易用

缺点

  • 需要为枚举类型重载IO

static_cast

优点

  • 直接可用

缺点

  • 与string转换需要二次转换(先转为整型underlying_type,再转换为string),难用
阅读此文

2015-07-01
C++-获取变量类型名

1
2
int a = 1;
std::cout << typeid(a).name() << ":" << a << std::endl;

./a.out | c++filt -t

参考

  1. http://stackoverflow.com/questions/4465872/why-does-typeid-name-return-weird-characters-using-gcc-and-how-to-make-it-prin
阅读此文

2015-06-30
爬虫优化经验

  • URL中host使用IP,域名解析,重定向等费时间(还需要设置header[“host”]为原域名)
阅读此文

2015-06-26
cmake-项目中使用protobbuf

阅读此文

2015-06-26
C++11-字符串与数字转换

数字 => 字符串

1
2
3
4
5
6
7
8
9
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);

字符串 => 数字

1
2
3
4
5
6
7
8
int stoi(const string& str, size_t *idx = 0, int base = 10);
long stol(const string& str, size_t *idx = 0, int base = 10);
unsigned long stoul(const string& str, size_t *idx = 0, int base = 10);
long long stoll(const string& str, size_t *idx = 0, int base = 10);
unsigned long long stoull(const string& str, size_t *idx = 0, int base = 10);
float stof(const string& str, size_t *idx = 0);
double stod(const string& str, size_t *idx = 0);
long double stold(const string& str, size_t *idx = 0);

结论

  • 优先使用boost::lexical_cast

    • 效率更高

    • 接口统一,代码优雅

    • locale敏感

参考

  1. http://stackoverflow.com/questions/23582089/is-boostlexical-cast-redundant-with-c11-stoi-stof-and-family
  2. http://www.boost.org/doc/libs/1_55_0/doc/html/boost_lexical_cast/performance.html#boost_lexical_cast.performance.tests_description
阅读此文

2015-06-26
mysql-数据类型

binary

  • 用来存储字节字符串,不像char类型,存储对应的字符编码值

  • 可以指定存储长度

阅读此文