《Windows核心编程》(第5版)第二章 字符和字符串处理

1. unicode编码

编码 尺寸
utf-8 1 - 4字节
utf-16 2字节
utf-32 4字节

2. Windows函数版本(带字符串)

…A ANSI编码,内部使用了…W的版本(会在内部进行转换)
…W UTF-16编码
如果定义了UNICODE宏就是UTF-16编码

3. C语言中的字符编码:

char ANSI编码
wchar_t UTF-16编码

4. 计算字符串长度。

版本 说明
srclen ANSI编码的字符串长度 string.h
wcslen utf-16编码的字符串长度 string.h
_tcslen wcslen(定义了_UNICODE宏)
srclen(没有定义_UNICODE宏)

5. 字符串杂项

  1. 老的字符串函数没有检查长度不安全,建议用新的函数(…_s,在StrSafe.h中定义)代替。
  2. 安全字符串返回一个errno_t的错误类型(在errno.h中定义)。
  3. 字符串操作失败时,目标内存会在开头放’\0’,然后用0xfd填充后面的内容。
  4. 计算字符串:_countof

6. 注册自定义的错误处理:

  1. 自定义:void [函数名] (PCTSTR msg,
    PCTSTR func,
    PCTSTR file,
    unsigned int line,
    unsigned ptr)
  2. 注册:_set_invalid_parameter_handler
  3. 隐藏默认错误窗口:_CrtSetReportMode(_CRT_ASSERT, 0)。

7. 剪切、复制、打印字符串

1.1 剪切字符串:HRESULT StringCchCat(PTSTR dest,
size_t destNum,
PCTSTR src)

1.2 剪切字符串:HRESULT StringCchCatEx(PTSTR dest,
size_t destNum,
PCTSTR src,
PTSTR* end,
size_t* remaining,
DWORD flags)

2.1 拷贝字符串:HRESULT StringCchCopy(PTSTR dest,
size_t destNum,
PCTSTR src)

2.2. HRESULT StringCchCopyEx(PTSTR dest,
size_t destNum,
PCTSTR src,
PTSTR* end,
size_t* remaining,
DWORD flags)

3.1 打印字符串:HRESULT StringCchPrintf(PTSTR dest,
size_t destNum,
PCTSTR format, …)

3.2 HRESULT StringCchPrintfEx(PTSTR dest,
size_t destNum,
PTSTR* end,
size_t* remaining,
DWORD flags,
PCTSTR src,
PCTSTR format, …)

参数 说明
HERSULT S_OK 成功
STRSAFE_E_INVALID_PARAMETER 失败,将NULL值传递给了参数
STRSAFE_E_INSUFFICIENT_BUFFER 失败,缓冲区太小
remaining 返回目标缓冲区还剩多少字符,不计’\0’,如果写NULL就不计算
end
flags STRSAFE_FILL_BEHIND_NULL
STRSAFE_IGNORE_NULLS 把NULL当做空字符串
STRSAFE_FILL_ON_FAILURE
STRSAFE_NULL_ON_FAILURE
STRSAFE_NO_TRUNCATION

8. 比较字符串:

  1. 按字符比较:int CompareString(LCID locale,
    DWORD flags,
    PCTSTR s1,
    int cch1,
    PCTSTR s2,
    int cch2)

  2. 按码位比较:int CompareStringOrdinal(PCWSTR s1,
    int cchCount1,
    PCWSTR s2,
    int cchCount2,
    BOOL ignoreCase)

locale 区域设置ID
flags NORM_IGNORECASE 忽略大小写
LINGUISTIC_IGNORECASE 忽略大小写
NORM_IGNOREKANATYPE 不区分平假名和片假名
NORM_IGNORENONSPACE 忽略non-spacing字符
LINGUISTIC_IGNOREDIACRITIC 忽略non-spacing字符
NORM_IGNORESYMBOLS 忽略符号
NORM_IGNOREWIDTH 不区分同一个字符的单字节和多字节
SORT_STRINGSORT 将标点符号当做符号处理
发布了41 篇原创文章 · 获赞 4 · 访问量 3903

猜你喜欢

转载自blog.csdn.net/weixin_42487874/article/details/103111106
今日推荐