迅雷笔试题的Utf-8编码检测的实现
来源:互联网 发布:centos mv 移动文件夹 编辑:程序博客网 时间:2024/06/06 02:26
程序中用移位运算来判断,之后觉得没必要,编码完全可以理解为如下表格:
0000-007F0XXXXXXX0~1270080-07FF110XXXXX10XXXXXX192~223
128~1910800-FFFF1110XXXX
10XXXXXX
10XXXXXX224~239
128~191
128~191
直接将unsigned char 转换为 unsigned int ,然后判断大小即可。程序还是沿用移位运算:
#include "stdafx.h"#include <iostream>using namespace std;int calc_utf8_count(unsigned char* data_ptr,unsigned int data_len){int countOfByte=0;if (data_len==0||data_ptr==NULL){return 0;}int curNumByte=0; unsigned char curByte=NULL;while(curNumByte<data_len){curByte=data_ptr[curNumByte];if (!(curByte>>7)){//说明第一位是0,属于第一种情况countOfByte++;curNumByte++;continue;}if ((curByte>>5)==6||(curByte>>5)==7){//是以110或111开头if ((curByte>>5)==6){//以110开头,属于第二种curByte=data_ptr[++curNumByte];if ((curByte>>6)==2){//后面的字节以10开头,说明合法countOfByte++;curNumByte++;} else{return -1;}} else{//以111开头,可能属于第三种if ((curByte>>4)==14){//以1110开头,属于第三种curByte=data_ptr[++curNumByte];if ((curByte>>6)==2){//后面的字节以10开头curByte=data_ptr[++curNumByte];if ((curByte>>6)==2){//第三个字节以10开头countOfByte++;curNumByte++;} else{return -1;}} else{return -1;}} else{return -1;}}}elsereturn -1;}return countOfByte;}int _tmain(int argc, _TCHAR* argv[]){unsigned char data[] = {0x79,0xC0,0x80,0xE0,0x80,0x80,0x78};cout<<calc_utf8_count(data,7)<<endl;return 0;}
- 迅雷笔试题的Utf-8编码检测的实现
- 迅雷笔试题的josephus问题实现
- UTF-8编码中BOM的检测与删除
- UTF-8编码中BOM的检测与删除
- UTF-8编码中BOM的检测与删除
- UTF-8编码中BOM的检测与删除
- 迅雷的多线程笔试题总结
- PHP 检测字符串的编码是否是UTF-8编码的函数 check_utf8() 准确率最高的!
- php检测字符串编码(utf-8,gbk,gb2312)是否为utf8编码的方法总结
- UTF-8、UTF-16、UTF-32之间的编码转换
- UTF-8、UTF-16、UTF-32编码的相互转换
- UTF-8、UTF-16、UTF-32编码的相互转换
- UTF-8的编码方式
- UTF-8编码的转换
- java实现utf-8与GB2312编码的转换
- java实现utf-8与GB2312编码的转换
- PHP中检测文件是否为UTF-8编码的函数
- 迅雷笔试题_实现全排列
- git的使用
- java与数据库交互的几种常见方式汇总
- 关于sqrt函数 error C2668: 'sqrt' : ambiguous call to overloaded function
- 关于怎么绘制星级评价方法
- 一位资深HR的职场感言
- 迅雷笔试题的Utf-8编码检测的实现
- Muduo里的blockingQueue实现线程池伪码
- 基于openswan klips的IPsec VPN实现分析(二)数据接收
- OftenTap亲密度通讯录: 联系人亲密度管理, 群发短信/邮件, 快捷拨号器
- MySQL新建用户,授权,删除用户,修改密码
- 尾递归
- 大话设计模式八:工厂方法模式(factory method)
- win7+64位+Oracle+11g+64位下使用PLSQL+Developer+的解决办法
- 6.3.2 层次遍历