四、中英文混合型字符串输出长度的确定
中英文混合型字符串输出长度的确定问题在VB编程中经常遇到,而且可以通过VB, VC++混合编程有效解决,所以在此一并给出。
VB编程中,经常需要得到某个字符串在实际输出时所需要的长度。这时,我们通常会考虑Len()和LenB()这两个函数。
我们知道,Len()返回的是字符串中字符的个数,对于不含中文字符的字符串,其返回值通常就等于该字符串的输出长度;LenB()返回的则是按照双字节字符集(DBCS)计算出的字符串所占用的字节数,对于纯中文字符组成的字符串,其返回值通常也等于该字符串的输出长度。但是,当字符串中既有中文又有英文(这里将数字等视为英文)字符时,二者的返回值都不等于该字符串的输出长度。比如:“A中国人”这个字符串,用Len()函数时将返回4;LenB()则返回8;而实际输出时(比如向某记录文件输出该字符串),它将占用7个印刷符(每个英文字符占1个,每个中文字符占2个)。
为了计算中英文混合型字符串的输出长度,我们可以用VC++编写一个完成此计算的DLL库函数,在VB中直接调用该函数即可。该VC++函数和VB中的调用代码如下:
1) VC++ 6.0中的DLL函数
long APIENTRY Sizeof_vbString(char* at) { return (long)(::atrlen(st)); //::atrlen()返回int值,但在32位操作系统下, //VC++中的int类型与VB中Long类型的范围是相当的 } |
2) VB 6.0中对Sizeof_vbString()的声明和调用
...... Declare Function Sizeof_vbString Lib "C:\DLLTest.dll"_ (By Val st As String) As Long ...... ...... Dim stLen& stLen=Sizeof_vbString ("A中国人") stLen=7 ...... |
应该指出:上述方法同样可以计算纯英文或纯中文字符串的输入长度。
查看本文来源