CString str1 = "xxxxxxxxxxxxxxxxxx";
int n = str1.GetLength();
CString str2 = str1.Left(i);
其中,str是一个包含字母和汉字的字符串,i是1到n之间的随机数。请问大家,如何判断str2最后一个字节是字母还是汉字?如果是汉字,它是双字节的哪一个字节?
int n = str1.GetLength();
CString str2 = str1.Left(i);
其中,str是一个包含字母和汉字的字符串,i是1到n之间的随机数。请问大家,如何判断str2最后一个字节是字母还是汉字?如果是汉字,它是双字节的哪一个字节?
“汉字的高低位判断只能用从“头”(第一个起始汉字)开始计数”是什么意思?如果字符串中包含多个汉字,无法判断任意一个汉字的高低位吗?麻烦解释一下!
“汉字的高低位判断只能用从“头”(第一个起始汉字)开始计数”是什么意思?如果字符串包含多个汉字,能否判断任意一个汉字的高低位?麻烦解释一下!
对任一个刚可以用if(str.GetAt(n)&0x80)是汉字,else是字母
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnButtonExit();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
可以判断是不是汉字,但如何判断是汉字的高或低字节呢?
if(str.GetAr(n-1)&0x80)则是汉字
{
int nAscii = 0;
CString str = szString;
for( int i = 0;i < str.GetLength();i ++ ) {
if( (BYTE)str[i] < 0x7f ) nAscii ++;
if( (nAscii % 2 == 0 && i + nAscii * 2 >= nMaxSize) ) {
saSplitString.Add( str.Left( i ) );
str = str.Mid( i );
i = -1;
nAscii = 0;
continue;
}
else if( i + nAscii * 2 >= nMaxSize && i % 2 > 0 ) {
saSplitString.Add( str.Left( i ) );
str = str.Mid( i );
i = -1;
nAscii = 0;
continue;
}
}
if( !str.IsEmpty() ) saSplitString.Add( str );
}该函数把一个较长的包含字母、数字和汉字的字串中按照一定的长度分成多个子串,保证每个字串不会把一个汉字给分成两半。
最后一个字节是汉字的低字节
0 1 2 34 56 78很容易判断str.GetAt(5) > 0x7e,是汉字。但是,是高位还是地位呢?就需要从“的”字的索引“3”开始“1-2”计数,即:3-4-5
1-2-1 很明显,str.GetAt(5)返回的是汉字的高位字节。
一般来讲,在国标码里,首字节的asc值161-163是标点,一般符号,序号,数字,
拉丁字母,164-165是日文假名,166是希腊字母,167是俄文字母,168是汉语拼音
字母和注音字母,176-254是汉字。
一般我做的时候,是用unsigned char读取一个字节,判断是否大于128,然后在读取下一个字节。你的问题“判断当前所指是汉字的高位字节还是低位字节”理论上
不可能,因为一个汉字的高低位互换就可能是另一个汉字,不可能拿到一个大于176的字符就判断是汉字的高位还是低位。除非你拿到i后到str1里往前或者往后找asc码来判断,好像比较麻烦。:)
多谢详细讲解,小弟我已经开窍了:)to all:
还有一个问题,用IsDBCSLeadByte函数是不是无法判断双字节汉字的高低位?