“C 语言再学习”的版本间的差异

来自Dennis的知识库
跳转到: 导航搜索
第四节
第四节
 
第46行: 第46行:
 
codepoint = 0x10000 + (H − 0xD800) × 0x400 + (L − 0xDC00)
 
codepoint = 0x10000 + (H − 0xD800) × 0x400 + (L − 0xDC00)
 
</pre>
 
</pre>
** UTF-8 的编码单元是 8 位字节,每个码点编码成 1 至 4 个字节。它的编码方式很简单,按照码点的范围,把码点的二进位分拆成 1 至最多 4 个字节:
+
* UTF-8 的编码单元是 8 位字节,每个码点编码成 1 至 4 个字节。它的编码方式很简单,按照码点的范围,把码点的二进位分拆成 1 至最多 4 个字节:
  
 
[[文件:utf8.png]]
 
[[文件:utf8.png]]

2017年1月10日 (二) 13:36的最后版本

目录

[编辑] 从零开始的 JSON 库教程

原文地址: https://zhuanlan.zhihu.com/p/22457315?refer=milocode

[编辑] 第一节

  • cmake 可以生成 xcode 项目: cmake -G Xcode
  • 通常枚举值用全大写(如 LEPT_NULL),而类型及函数则用小写(如 lept_type
  • 宏的编写技巧: 反斜线代表该行未结束,会串接下一行。而如果宏里有多过一个语句(statement),就需要用 do { /*...*/ } while(0) 包裹成单个语句。
  • 测试框架使用了 __LINE__ 这个编译器提供的宏,代表编译时该行的行号。如果用函数或内联函数,每次的行号便都会相同。
  • 关于 inline: http://blog.csdn.net/hanchaoman/article/details/7270345

[编辑] 第二节

  • 提取重复代码,c 语言除了函数之外,宏是很重要的手段。
  • 用 #if 0 ... #endif 去禁用代码是一个常用技巧,而且可以把 0 改为 1 去恢复。
  • JSON 数字解析流程图

Json-number.png


[编辑] 第三节

  • man malloc 。 realloc 可以释放传入的指针所指向的内存,并分配新的。
  • 我发现 c 语言提藏简洁代码。
  • vector 或者其他数据结构的增长因子以小于 2 为佳,比如 1.5,为什么参考 https://www.zhihu.com/question/25079705/answer/30030883
  • 对于很小的『函数』,直接利用宏内联是更习惯的做法,比如 lept_init
  • 利用 ifndef 来做默认参数配置,用户可以自定义。
#ifndef LEPT_PARSE_STACK_INIT_SIZE
#define LEPT_PARSE_STACK_INIT_SIZE 256
#endif
  • 走到字符串到尾部,可以直接 for(;*p;p++),因为字符串末尾为 '\0',也就是 0。

[编辑] 第四节

  • Unicode 的一些知识点:
    • 统一字符集(Universal Coded Character Set, UCS),每个字符映射至一个整数码点(code point),码点的范围是 0 至 0x10FFFF,码点又通常记作 U+XXXX,当中 XXXX 为 16 进位数字。例如 劲 → U+52B2、峰 → U+5CF0。很明显,UCS 中的字符无法像 ASCII 般以一个字节存储。中、日、韩的三种文字占用了Unicode中0x3000到0x9FFF的部分。
    • Unicode 还制定了各种储存码点的方式,这些方式称为 Unicode 转换格式(Uniform Transformation Format, UTF)。现时流行的 UTF 为 UTF-8、UTF-16 和 UTF-32。每种 UTF 会把一个码点储存为一至多个编码单元(code unit)。例如 UTF-8 的编码单元是 8 位的字节、UTF-16 为 16 位、UTF-32 为 32 位。除 UTF-32 外,UTF-8 和 UTF-16 都是可变长度编码。
    • U+0000 至 U+FFFF 这组 Unicode 字符称为基本多文种平面(basic multilingual plane, BMP),还有另外 16 个平面。那么 BMP 以外的字符,JSON 会使用代理对(surrogate pair)表示 \uXXXX\uYYYY。在 BMP 中,保留了 2048 个代理码点。如果第一个码点是 U+D800 至 U+DBFF,我们便知道它的代码对的高代理项(high surrogate),之后应该伴随一个 U+DC00 至 U+DFFF 的低代理项(low surrogate)。然后,我们用下列公式把代理对 (H, L) 变换成真实的码点:
codepoint = 0x10000 + (H − 0xD800) × 0x400 + (L − 0xDC00)
  • UTF-8 的编码单元是 8 位字节,每个码点编码成 1 至 4 个字节。它的编码方式很简单,按照码点的范围,把码点的二进位分拆成 1 至最多 4 个字节:

Utf8.png

个人工具
名字空间

变换
操作
导航
工具箱