AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > VB编程

Visual Basic6编程中的汉字处理

51自学网 http://www.wanshiok.com

 

  四、VB6中实现汉字字模转换的技巧

  在许多工程控制的应用环境中,经常需要对标准的汉字字模进行调整和转换。

  要对汉字字模进行转换首先应该正确地读出16点阵汉字在字库中的32字节的字模数据。设某一汉字的内码为ddff,其中dd表示区内码,ff表示位内码,则dd-&Ha1为该汉字的区码,ff-&Ha1为该汉字的位码。则该汉字在字库中的位置为:

  Location = [(dd-&Ha1)×94 + (ff-&Ha1)]×32

  需要注意的是,以何种方式从字库文件中读取这32字节也是一个关键问题。由于二进制(Binary)方式访问文件可以直接查看文件中指定的字节,而且二进制方式也是唯一支持用户到文件的任何位置读写任意长度数据的方法。因而以二进制方式打开汉字字库文件是最适合的。

  VB6虽然提供了较强的位运算功能,但是对于在字模转换中使用较多的移位操作,却没有提供对应的移位运算符、指令或函数。其实通过and(与)、or(或)二个位运算符即可编制一个自定义子函数来实现移位运算。

  下面的自定义子函数就是实现循环右移的:

  Public Function byteRight(byte1 As Byte, n As Integer) As Byte '将byte1右移n位

  Dim TemVar As Byte '临时变量

  Dim TemVar1 As Byte '临时变量

  Dim X, Y As Integer

  TemVar = byte1

  For X = 1 To n '移多少位就循环多少次

  For Y = 1 To 8 '从第一位(右边第一位)开始循环右移

  Select Case Y

  Case 1

  If (TemVar And &H1) = &H1 Then '如果临时变量TemVar的第一位是1,

  TemVar1 = &H1 '则将临时变量TemVar1置1,

  Else

  TemVar1 = &H0 '则将临时变量TemVar1置0,

  End If

  Case 2

  If (TemVar And &H2) = &H2 Then '如果临时变量TemVar的第二位是1,

  TemVar = TemVar Or &H1 '则将其第一位置1(其它位不变),

  Else
TemVar = TemVar And &HFE '反之将第一位置0(其它位不变)

  End If

  Case 3

  If (TemVar And &H4) = &H4 Then '操作与上面相同

  TemVar = TemVar Or &H2

  Else

  TemVar = TemVar And &HFD

  End If

  Case 4

  If (TemVar And &H8) = &H8 Then

  TemVar = TemVar Or &H4

  Else

  TemVar = TemVar And &HFB

  End If

  Case 5

  If (TemVar And &H10) = &H10 Then

  TemVar = TemVar Or &H8

  Else

  TemVar = TemVar And &HF7

  End If

  Case 6

  If (TemVar And &H20) = &H20 Then

  TemVar = TemVar Or &H10

  Else

  TemVar = TemVar And &HEF

  End If

  Case 7

  If (TemVar And &H40) = &H40 Then

  TemVar = TemVar Or &H20

  Else

  TemVar = TemVar And &HDF

  End If

  Case 8

  If (TemVar And &H80) = &H80 Then

  TemVar = TemVar Or &H40

  Else

  TemVar = TemVar And &HBF

  End If

  If TemVar1 = &H1 Then '移完第八位后,如果TemVar1是1(即第一位是1)

  TemVar = TemVar Or &H80 '则将TemVar的第八位置1

  Else

  TemVar = TemVar And &H7F '反之置0

  End If

  End Select

  Next Y

  Next X

  byteRight = TemVar '将TemVar的值返回给函数名

  End Function

  尤其需要注意的是当把二进制数据写入文件中时,必须使用Byte数据类型的数组变量,而不是 String 变量。 String 被认为包含的是字符,而二进制型数据可能无法正确地存在 String 变量中。

 
 

上一篇:ADO设定独占性的资料库  下一篇:利用VB实现对IE的调用与控制