//判断汉字截断
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
#pragma comment(lib,"user32.lib")
bool IsHanZiCorrupted( string &SeriesRecvString )
{
DWORD len=strlen( SeriesRecvString.c_str() );
DWORD i=0;
while( i<len)
{
if( IsDBCSLeadByte( SeriesRecvString[i] ) )
{
i+=2;
if( i> len )
{
return true;
}
}
else
{
++i;
}
}
return false;
}
int main ()
{
//0x81:汉字内码扩展规范(GBK) 1stByte :0x81~0xFE; 2ndByte:0x40~0x7E;
//if( (unsigned char)SeriesRecvString[i]>=0x81 ) 一定要转成无符号数才能正确比较
string str("c鑯d苦e命f三g国h无i双j楚k王l好m细n腰o宫p中q多r饿s死敌");
cout<<"str=\""<<str<<"\""<<endl;
cout<<"len()="<<str.length()<<endl;
cout<<"size()="<<str.size()<<endl;
cout<<"strlen(c_str())="<<strlen( str.c_str() )<<endl<<endl;
for(int i=0;i<str.length();++i)
{
printf("str[%d]:%02x",i,(unsigned char) str[i]);
if( IsDBCSLeadByte(str[i]) )cout<<":DBCS ";
else cout<<":"<<str[i];
cout<<endl;
}
IsHanZiCorrupted(str)?cout<<"IsHanZiCorrupt:yes"<<endl:cout<<"IsHanZiCorrupt:no"<<endl;
cout<<endl;
str[51]='a';
for(int i=0;i<str.length();++i)
{
printf("str[%d]:%02x",i,(unsigned char) str[i]);
if( IsDBCSLeadByte(str[i]) )cout<<":DBCS ";
else cout<<":"<<str[i];
cout<<endl;
}
IsHanZiCorrupted(str)?cout<<"IsHanZiCorrupt:yes"<<endl:cout<<"IsHanZiCorrupt:no"<<endl;
}
///
str="c鑯d苦e命f三g国h无i双j楚k王l好m细n腰o宫p中q多r饿s死敌"
len()=53
size()=53
strlen(c_str())=53
str[0]:63:c
str[1]:e8:DBCS
str[2]:7e:~
str[3]:64:d
str[4]:bf:DBCS
str[5]:e0:DBCS
str[6]:65:e
str[7]:c3:DBCS
str[8]:fc:DBCS
str[9]:66:f
str[10]:c8:DBCS
str[11]:fd:DBCS
str[12]:67:g
str[13]:b9:DBCS
str[14]:fa:DBCS
str[15]:68:h
str[16]:ce:DBCS
str[17]:de:DBCS
str[18]:69:i
str[19]:cb:DBCS
str[20]:ab:DBCS
str[21]:6a:j
str[22]:b3:DBCS
str[23]:fe:DBCS
str[24]:6b:k
str[25]:cd:DBCS
str[26]:f5:DBCS
str[27]:6c:l
str[28]:ba:DBCS
str[29]:c3:DBCS
str[30]:6d:m
str[31]:cf:DBCS
str[32]:b8:DBCS
str[33]:6e:n
str[34]:d1:DBCS
str[35]:fc:DBCS
str[36]:6f:o
str[37]:b9:DBCS
str[38]:ac:DBCS
str[39]:70:p
str[40]:d6:DBCS
str[41]:d0:DBCS
str[42]:71:q
str[43]:b6:DBCS
str[44]:e0:DBCS
str[45]:72:r
str[46]:b6:DBCS
str[47]:f6:DBCS
str[48]:73:s
str[49]:cb:DBCS
str[50]:c0:DBCS
str[51]:b5:DBCS
str[52]:d0:DBCS
IsHanZiCorrupt:no
str[0]:63:c
str[1]:e8:DBCS
str[2]:7e:~
str[3]:64:d
str[4]:bf:DBCS
str[5]:e0:DBCS
str[6]:65:e
str[7]:c3:DBCS
str[8]:fc:DBCS
str[9]:66:f
str[10]:c8:DBCS
str[11]:fd:DBCS
str[12]:67:g
str[13]:b9:DBCS
str[14]:fa:DBCS
str[15]:68:h
str[16]:ce:DBCS
str[17]:de:DBCS
str[18]:69:i
str[19]:cb:DBCS
str[20]:ab:DBCS
str[21]:6a:j
str[22]:b3:DBCS
str[23]:fe:DBCS
str[24]:6b:k
str[25]:cd:DBCS
str[26]:f5:DBCS
str[27]:6c:l
str[28]:ba:DBCS
str[29]:c3:DBCS
str[30]:6d:m
str[31]:cf:DBCS
str[32]:b8:DBCS
str[33]:6e:n
str[34]:d1:DBCS
str[35]:fc:DBCS
str[36]:6f:o
str[37]:b9:DBCS
str[38]:ac:DBCS
str[39]:70:p
str[40]:d6:DBCS
str[41]:d0:DBCS
str[42]:71:q
str[43]:b6:DBCS
str[44]:e0:DBCS
str[45]:72:r
str[46]:b6:DBCS
str[47]:f6:DBCS
str[48]:73:s
str[49]:cb:DBCS
str[50]:c0:DBCS
str[51]:61:a
str[52]:d0:DBCS
IsHanZiCorrupt:yes