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

1. unicode编码

编码尺寸
utf-81 - 4字节
utf-162字节
utf-324字节

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

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

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

charANSI编码
wchar_tUTF-16编码

4. 计算字符串长度。

版本说明
srclenANSI编码的字符串长度string.h
wcslenutf-16编码的字符串长度string.h
_tcslenwcslen(定义了_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, …)

参数说明
HERSULTS_OK成功
STRSAFE_E_INVALID_PARAMETER失败,将NULL值传递给了参数
STRSAFE_E_INSUFFICIENT_BUFFER失败,缓冲区太小
remaining返回目标缓冲区还剩多少字符,不计’\0’,如果写NULL就不计算
end
flagsSTRSAFE_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
flagsNORM_IGNORECASE忽略大小写
LINGUISTIC_IGNORECASE忽略大小写
NORM_IGNOREKANATYPE不区分平假名和片假名
NORM_IGNORENONSPACE忽略non-spacing字符
LINGUISTIC_IGNOREDIACRITIC忽略non-spacing字符
NORM_IGNORESYMBOLS忽略符号
NORM_IGNOREWIDTH不区分同一个字符的单字节和多字节
SORT_STRINGSORT将标点符号当做符号处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值