下面是我写的转换函数:
[注]:但如果字符串中没有出现英文字符时,只有数字时,这个函数运行的补码结果是正确的,这里的字符串我要得到的效果是这样的:如果输入字符串是0104A000B0000C000000000,按位成十六进制相加,就得到十六进制26,其补码是DA。这个DA就是我想要的结果啦。我想知道我这程序出了什么问题,是字符空间的存储问题吗?有什么办法可解决的?
Function CheckOut(ChkValue As String) As String
Dim j As Integer
Dim OutNum As Integer
Dim OutNum1 As Integer
Dim OutNum2 As Integer
Dim OutBuf As Variant
Dim HightStrHex As Integer
Dim LowStrHex As Integer
OutNum = 0
OutNum1 = 0
OutBuf = 0
HightStrHex = 0
LowStrHex = 0
'OutBuf = StrConv(ChkValue, vbFromUnicode) '这里用strconv函数
For j = 1 To Len(ChkValue)
  OutBuf = Mid(ChkValue, j, 1)
  Select Case OutBuf
  Case 0
  OutNum1 = 0
  Case 1
  OutNum1 = 1
  Case 2
  OutNum1 = 2
  Case 3
  OutNum1 = 3
  Case 4
  OutNum1 = 4
  Case 5
  OutNum1 = 5
  Case 6
  OutNum1 = 6
  Case 7
  OutNum1 = 7
  Case 8
  OutNum1 = 8
  Case 9
  OutNum1 = 9
  Case A
  OutNum1 = 10
  Case B
  OutNum1 = 11
  Case C
  OutNum1 = 12
  Case D
  OutNum1 = 13
  Case E
  OutNum1 = 14
  Case F
  OutNum1 = 15
  End Select
  OutNum = OutNum + OutNum1
Next j
  OutNum2 = 256 - OutNum
  HightStrHex = OutNum2 \ 16
  LowStrHex = OutNum2 Mod 16
  If HightStrHex < 10 Then
  HightStrHex = HightStrHex + 48
  Else
  HightStrHex = HightStrHex + 55
  End If
  If LowStrHex < 10 Then
  LowStrHex = LowStrHex + 48
  Else
  LowStrHex = LowStrHex + 55
  End If
CheckOut = Chr$(HightStrHex) + Chr$(LowStrHex)
End  测试中将一串字符串“0104A000B0000C000000000”共24个,但是运算后的补码是D9,正确应该是DA,请各位大虾帮帮忙,谢谢!

解决方案 »

  1.   

    Select Case OutBuf 'OutBuf 是字符串'
        ...
        Case A 'A 是未定义的变量'
        ...
    有跟简单的方法
        For j = 1 To Len(ChkValue)
            OutBuf = Mid(ChkValue, j, 1)
            OutNum1 = CByte("&H" & OutBuf)
            OutNum = OutNum + OutNum1
        Next j
      

  2.   

    Private Function CalcBUMA(ByVal lowbyte As Byte, ByVal hibyte As Byte) As Integer
        Dim Temp_int As Long
        'Dim Temp_shortint As Integer
        Dim Temp_shortint As Long
        Dim Temp_uchar As Byte
        Dim Temp_word As Long    Temp_uchar = hibyte And &H80
        If Temp_uchar = &H80 Then
            '负数
            Temp_shortint = lowbyte * 1# + hibyte * 256#
            'Temp_shortint = 1 * 1# + 128 * 256# 测试行
            Temp_shortint = (Not Temp_shortint) + 1
            Temp_shortint = Temp_shortint + 65536
            'Temp_shortint = (Not Temp_shortint) + 1
            Temp_int = Temp_shortint * (-1#)
        Else
            '正数
            Temp_int = lowbyte + hibyte * 256
        End If    CalcBUMA = Temp_int
    End Function