下面是我写的转换函数:
[注]:但如果字符串中没有出现英文字符时,只有数字时,这个函数运行的补码结果是正确的,这里的字符串我要得到的效果是这样的:如果输入字符串是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,请各位大虾帮帮忙,谢谢!
解决方案 »
- 请教DataGrid控件问题
- 请教,程序中要导电子表格,office2000要引用excel9.0库,这个引用能用于office2000 or xp吗?
- 100求:如何将Treeview 的背景变成一幅图片?(来者有分)
- 关于一个数据文件
- 读文件时,一行一行读,读出一行怎样检查该行是否含有数字?
- 帮俺看看这段脚本真么用?createCalendar(control)是什么参数???
- 可以發大財
- 好烦啊~~~~在下的毕业设计搞不定了,哪位仁兄仁姐过来帮我看看啊,调试一下,高分相送~~~~~我还请客的!!!
- 怎样将一个数组的第0行第0列给datagrid的第1行和第0列,即将数组的0行和datagrid第1列相对
- 怎样去掉关闭按纽?
- 求助!!来人啊 帮忙啊 谢谢啊
- 关于vb的usercontrol控件上面的image控件透明的问题
...
Case A 'A 是未定义的变量'
...
有跟简单的方法
For j = 1 To Len(ChkValue)
OutBuf = Mid(ChkValue, j, 1)
OutNum1 = CByte("&H" & OutBuf)
OutNum = OutNum + OutNum1
Next j
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