【发布时间】:2017-05-15 06:46:08
【问题描述】:
我是 VB6 的新手,我想将参数从 Double 转换为 Hex,然后再转换回 Long 用于中文 Unicode。
这里的问题是对于从 1 到 127 的输入值,输出是相同的。对于超过 127 的值,输出为 63。参数长度为 4 个字节。这是我到目前为止使用的 2 个转换函数的 sn-p:
双转十六进制:
Public Function ConvDoubleToHexString(dVal As Double, ByVal nByteCount As Integer) As String
m = 1
sHex = Hex(dVal)
nByteCountMerk = nByteCount
If nByteCount < Len(sHex) / 2 Then nByteCount = Len(sHex) / 2
If nByteCount < 1 Then nByteCount = 1
sHex = String(nByteCount * 2 - Len(sHex), "0") & sHex
For n = 0 To nByteCount - 1
sTmp = ChrW(Val("&H" & Mid(sHex, m, 2)))
m = m + 2
sRet = sRet & sTmp
next n
If Not bLH Then
ConvDoubleToHexString = Right(sRet, nByteCountMerk)
Else
For n = Len(sRet) To 1 Step -1
sLH = sLH & Mid(sRet, n, 1)
Next n
ConvDoubleToHexString = Left(sLH, nByteCountMerk)
End If
End Function
HexToLong:
Public Function ConvHexStringToLong(sHex As String) As Long
If sHex = "" Then
ConvHexStringToLongAbs = knolong
Exit Function
End If
For i = 1 To Len(sHex)
If l >= 8388608 Then
ConvHexStringToLongAbs = knolong
Exit Function
End If
l = l * 256 * 2
l = l + Asc(Mid(sHex, i, 1))
Next
ConvHexStringToLong = l
End Function
【问题讨论】:
-
我很困惑为什么会涉及双重问题?无论编码如何,这是用于传递任何类型字符的错误数据类型。您能否提供有关该参数的其他详细信息?
-
嗨@tcarvin 感谢您的回复。输入参数适用于 1-127 之间的值。除此之外,它还显示一个“?”作为它的值,即十进制的 63。转换后我无法看到实际值(128+)。困扰我的线路是:
sTmp = ChrW(Val("&H" & Mid(sHex, m, 2))) -
你确定它不只是向你展示一个 ?因为调试器或即时窗口无法以它们使用的字体呈现这些字符?
-
@tcarvin 这是我在 DoubleToHex 函数中 For 循环的每一步调试时看到的: 1. dVal -> 129# sHex -> "00000081" sTmp -> vbNullChar sRet -> vbNullChar 2. dVal -> 129# sHex -> "00000081" sTmp -> vbNullChar sRet -> String(2,0) 3. dVal -> 129# sHex -> "00000081" sTmp -> "?" sRet -> String(3,0) 4. dVal -> 129# sHex -> "00000081" sTmp -> "?" sRet -> String(3,0) & "?"
标签: vba unicode vb6 unicode-string