四、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 变量中。  
2/2 首页 上一页 1 2 |