//判斷漢字截斷
#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