工程需要,根据网上例程对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 转换时产生单独的字符,此是默认转换选项,与W
VS 2019 MFC CRC16校验算法例程总结(计算法/查表法以及CRC16校验表自动生成)
于 2022-02-21 10:06:54 首次发布
这篇博客总结了在VS 2019 MFC环境中实现CRC16校验算法的方法,包括计算法和查表法。作者通过封装类实现了查表法,并自动生成CRC16校验表。文中提到Unicode环境下的字符串转换问题,以及展示了两种方法的等效性。最后,作者计划进一步完善CRC16查表法的类库。
摘要由CSDN通过智能技术生成