VS 2019 MFC CRC16校验算法例程总结(计算法/查表法以及CRC16校验表自动生成)

        工程需要,根据网上例程对CRC16校验方法进行了总结。CRC16为通讯领域常用的校验算法,其原理想必大家都很清楚。下面为相关的总结和封装类代码。被例程将CRC16校验的方法分为及算法和查表法,查表法的校验表由封装类自动生成。

         Unicode环境下要将Cstring转换为Char*字符串要对字符串的宽度进行转换,转换方法主要用到WideCharToMultiByte()函数进行转换。    

函数原型:
int WideCharToMultiByte(
        UINT CodePage, 
        DWORD dwFlags, 
        LPWSTR lpWideCharStr, 
        int cchWideChar, 
        LPCSTR lpMultiByteStr, 
        int cchMultiByte, 
        LPCSTR lpDefaultChar, 
        PBOOL pfUsedDefaultChar
); 

参数:   

CodePage:指定执行转换的代码页,这个参数可以为系统已安装或有效的任何代码页所给定的值。你也可以指定其为下面的任意一值: (我想最常用的应该是CP_ACP和CP_UTF8了,前者将宽字符转换为ANSI,后者转换为UTF8。 )  
CP_ACP
 ANSI代码页
CP_MACCP
 Macintosh代码页 
CP_OEMCP
 OEM代码页 
CP_SYMBOL
 符号代码页(42) 
CP_THREAD_ACP
 当前线索ANSI代码页 
CP_UTF7
 使用UTF-7转 
CP_UTF8
 使用UTF-8转换

dwFlags: 指定如何处理没有转换的字符,但不设此参数函数会运行的更快一些,我都是把它设为0。 可设的值如下表所示:
WC_NO_BEST_FIT_CHARS
 把不能直接转换成相应多字节字符的Unicode字符转换成lpDefaultChar指定的默认字符。也就是说,如果把Unicode转换成多字节字符,然后再转换回来,你并不一定得到相同的Unicode字符,因为这期间可能使用了默认字符。此选项可以单独使用,也可以和其他选项一起使用。 
WC_COMPOSITECHECK
 把合成字符转换成预制的字符。它可以与后三个选项中的任何一个组合使用,如果没有与他们中的任何一个组合,则与选项WC_SEPCHARS相同。
WC_ERR_INVALID_CHARS
 此选项会致使函数遇到无效字符时失败返回,并且GetLastError会返回错误码
ERROR_NO_UNICODE_TRANSLATION
 否则函数会自动丢弃非法字符。此选项只能用于UTF8
WC_DISCARDNS
 转换时丢弃不占空间的字符,与WC_COMPOSITECHECK一起使用
WC_SEPCHARS
 转换时产生单独的字符,此是默认转换选项,与WC_COMPOSITECHECK一起使用

你可能感兴趣的:(C++,MFC,mfc,算法,microsoft,c++,visualstudio)