VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - VB5.0 中关于字节处理的几个函数
发表评论(0)作者:不详, 平台:VB6.0+Win98, 阅读:8459, 日期:2001-11-13
VB5.0 中关于字节处理的几个函数
---- 因 为 字 符 码 不 一 样, 所 以 在16 位 环 境 下 开 发 的 有 关 字 节 处 理 的 程 序 在32 为 环 境 下 就 不 能 正 确 地 运 行, 如 果 在32 位 环 境 下 做 出 具 有16 位 环 境 下 有 关 字 节 处 理 函 数 功 能 的 相 应 的 函 数, 那 么 就 很 容 易 通 过 函 数 名 称 替 换 把16 位 环 境 下 的 程 序 移 植 到32 位 环 境。

---- 先 在vb5.0 的 立 即 窗 口 下 做 以 下 试 验:

strzfs = “vb5.0开发环境”
? Len(strzfs)
9

---- 就 是 说, 在vb5.0 中,Len 函 数 返 回 的 是 字 符 串 的 字 符 个 数, 而 不 是 字 节 数, 它 把 单 字 节 字 符 和 双 字 节 字 符 都 认 为 是1。 再 试 一 下 LenB 函 数 的 情 况:

stra = “a”
? Lenb(stra)
2

strhanzi = “ 你 好”
? Lenb(strhanzi)
4

---- 在vb5.0 中, 不 管 是 单 字 节 字 符, 还 是 双 字 节 字 符,LenB 都 返 回2。

---- 实 际 上,vb5.0 对 所 有 的 字 符 都 是 用Unicode 来 处 理 的, 因 此, 也 把 单 字 节 的 字 符 用Unicode 来 处 理。

---- vb5.0 提 供 了 字 符 码 之 间 变 换 的 函 数StrConv(), 我 们 来 试 一 下:

stra = “a”
stra1 = StrConv(stra,vbFromUnicode)
? Lenb(stra1)
1

strhanzi = “ 你 好”
strhanzi1 = StrConv(strhanzi,vbFromUnicode)
? LenB(strhanzi1)
4

---- 由 此 看 来, 利 用 函 数 StrConv 把 字 符 的 码 转 变 一 下, 就 可 以 达 到 目 的。

---- 下 面 介 绍 一 下 函 数 StrConv 的 用 法:

---- 返 回 按 指 定 类 型 转 换 的 Variant (String)。

语法
StrConv(string, conversion)

StrConv函数的语法有下面的命名参数:

部 分 说 明
string 必要参数。要转换的字符串表达式。
conversion 必要参数:Integer。其值的和决定转换的类型。

conversion参数的设置值为:

常 数 值 说 明
vbUpperCase 1 将字符串文字转成大写。
vbLowerCase 2 将字符串文字转成小写。
vbProperCase 3 将字符串中每个字的开头字母转成大写。
vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。
vbFromUnicode 128 将字符串由 Unicode转成系统的缺省码页。


---- 所 以, 我 们 就 可 以 利 用 函 数StrConv 做 成 一 个 和16 位 环 境 下 的 函 数Len() 具 有 相 同 功 能 的 函 数 FncLen()

Function FncLen(ByVal strzfs As String) As Long
FncLen = LenB(StrConv(strzfs,vbFromUnicode))
End Function

---- 同 样 地, 作 成 与 和16 位 环 境 下 的 函 数 Right() ,Left(),Mid(),Instr() 具 有 相 同 功 能 的 相 应 函 数FncRight(),FncLeft(),FncMid(),FncInstr()。 程 序 清 单 如 下:

Function FncRight (ByVal strzfs As String, ByVal LngLength As Long) As String
Dim StrTemp As String

StrTemp = RightB(StrConv(Strzfs,vbFromUnicode),LngLength)
FncRight = StrConv(StrTemp,vbUnicode)

End Function

Function FncLeft (ByVal strzfs As String, ByVal LngLength As Long) As String
Dim StrTemp As String

StrTemp = LeftB(StrConv(Strzfs,vbFromUnicode),LngLength)
FncLeft = StrConv(StrTemp,vbUnicode)
End Function

Function FncMid (ByVal strzfs As String, ByVal lngStart As Long, Optional ByVal lngLength As Long) As String
Dim StrTemp As String
Dim StrAscii As String

StrAscii = StrConv(strzfs, vbFromUnicode)

If IsMissing(lngLength) Then
StrTemp = Mid(StrAscii, lngStart)
Else
StrTemp = Mid(StrAscii, lngStart, lngLength)
End If
FncMid = StrConv(StrTemp,vbUnicode)

End Function

Function FncInstr (ByVal strzfs1 As String, ByVal strzfs2 As String, Optional varStart As Variant = 1, Optional varCompare As Variant = 0) As Variant
Dim strzfsA1As String
Dim strzfsA2As String

strzfsA1 = StrConv(strzfs1, vbFromUnicode)
strzfsA2 = StrConv(strzfs2, vbFromUnicode)

FncInstr = InstrB(strzfs1, strzfs2, varStart, varCompare)

End Function