2与3的代码: Option Explicit Dim bytSj(1 To 4) As BytePrivate Sub Command1_Click() Dim i As Long Dim lnSj As Long lnSj = 99999998 For i = 1 To Len(CStr(lnSj)) Step 2 bytSj((i + 1) / 2) = Val("&H" & (Mid(CStr(lnSj), i, 2))) Next For i = 1 To 4 Print bytSj(i) Next End SubPrivate Sub Command2_Click() Dim sj As String Dim i As Long Dim lnSj As Long For i = 1 To 4 sj = sj & Hex(bytSj(i)) Next Print CLng(sj) End Sub
1 Private Sub Command1_Click() Dim a As Integer, n As Integer Dim b As Integer, c As Integer Dim i As Integer a = 3: n = 15 For i = 1 To n b = a \ 2 c = (a Mod 2) * (2 ^ 14) a = c + b Debug.Print a Next
End Sub
function ROR(long v,integer n) as long dim v1 as long dim v2 as long do if n<0 then n=n+16 else exit do loop n=n mod 16 select n case 0 ROR=v case 1 v1=(v and &H1&) * &H8000& v2=v \ &H2& ROR=v1 or v2 case 2 v1=(v and &H3&) * &H4000& v2=v \ &H4& ROR=v1 or v2 case 3 v1=(v and &H7&) * &H2000& v2=v \ &H8& ROR=v1 or v2 case 4 v1=(v and &HF&) * &H1000& v2=v \ &H10& ROR=v1 or v2 case 5 v1=(v and &H1F&) * &H800& v2=v \ &H20& ROR=v1 or v2 case 6 v1=(v and &H3F&) * &H400& v2=v \ &H40& ROR=v1 or v2 case 7 v1=(v and &H7F&) * &H200& v2=v \ &H80& ROR=v1 or v2 case 8 v1=(v and &HFF&) * &H100& v2=v \ &H100& ROR=v1 or v2 case 9 v1=(v and &H1FF&) * &H80& v2=v \ &H200& ROR=v1 or v2 case 10 v1=(v and &H3FF&) * &H40& v2=v \ &H400& ROR=v1 or v2 case 11 v1=(v and &H7FF&) * &H20& v2=v \ &H800& ROR=v1 or v2 case 12 v1=(v and &HFFF&) * &H10& v2=v \ &H1000& ROR=v1 or v2 case 13 v1=(v and &H1FFF&) * &H8& v2=v \ &H2000& ROR=v1 or v2 case 14 v1=(v and &H3FFF&) * &H4& v2=v \ &H4000& ROR=v1 or v2 case 15 v1=(v and &H7FFF&) * &H2& v2=v \ &H8000& ROR=v1 or v2 end select end function想要2和3的答案,再给200分吧。
2 3Private Sub Command1_Click() Dim a As Long, i As Integer Dim b(1 To 4) As Byte, tmp As String a = 5556633 tmp = Format(a, "00000000") For i = 1 To 4 b(i) = Val("&H" & Mid(tmp, i * 2 - 1, 2)) Debug.Print Hex(b(i)) & "--" & b(i) Next
tmp = "" For i = 1 To 4 tmp = tmp & Hex(b(i)) Next Debug.Print Val(tmp)
End Sub
刚刚测试通过的代码Function ROR(v As Long, n As Integer) As Long Dim v1 As Long Dim v2 As Long Do If n < 0 Then n = n + 16 Else Exit Do Loop n = n Mod 16 Select Case n Case 0 ROR = v Case 1 v1 = (v And &H1&) * &H8000& v2 = v \ &H2& ROR = v1 Or v2 Case 2 v1 = (v And &H3&) * &H4000& v2 = v \ &H4& ROR = v1 Or v2 Case 3 v1 = (v And &H7&) * &H2000& v2 = v \ &H8& ROR = v1 Or v2 Case 4 v1 = (v And &HF&) * &H1000& v2 = v \ &H10& ROR = v1 Or v2 Case 5 v1 = (v And &H1F&) * &H800& v2 = v \ &H20& ROR = v1 Or v2 Case 6 v1 = (v And &H3F&) * &H400& v2 = v \ &H40& ROR = v1 Or v2 Case 7 v1 = (v And &H7F&) * &H200& v2 = v \ &H80& ROR = v1 Or v2 Case 8 v1 = (v And &HFF&) * &H100& v2 = v \ &H100& ROR = v1 Or v2 Case 9 v1 = (v And &H1FF&) * &H80& v2 = v \ &H200& ROR = v1 Or v2 Case 10 v1 = (v And &H3FF&) * &H40& v2 = v \ &H400& ROR = v1 Or v2 Case 11 v1 = (v And &H7FF&) * &H20& v2 = v \ &H800& ROR = v1 Or v2 Case 12 v1 = (v And &HFFF&) * &H10& v2 = v \ &H1000& ROR = v1 Or v2 Case 13 v1 = (v And &H1FFF&) * &H8& v2 = v \ &H2000& ROR = v1 Or v2 Case 14 v1 = (v And &H3FFF&) * &H4& v2 = v \ &H4000& ROR = v1 Or v2 Case 15 v1 = (v And &H7FFF&) * &H2& v2 = v \ &H8000& ROR = v1 Or v2 End Select End Function
1、将购物数量(双字节整数),循环右移N次(N界于0-15之间)代码 ,请注意是循环右移,非一般右移。Dim strTmp As String, intSource As Long, intLeft As Long, intRight As LongintRight = intSource \ (2 ^ N) intLeft = intSource Mod (2 ^ N) strTmp = CStr(intLeft) & CStr(intRight)intSource = Val(strTmp)循环右移可以造成溢出。楼主自己增加一点处理吧。2、将8位整数(如99999999)转BCD码的代码,转换完之间应该为4字节(如99999999转换完后,每个字节存放的数值应为&h99=153)Dim intSource As Long, bytBCD(4) As Byte, i As Long, strTmp As StringstrTmp = CStr(intSource) For i = 0 To 3 bytBCD(i) = Val("&H" & Mid(strTmp, i * 2 +1, 2)) Next i 3、将BCD码转长整数的代码,即与2中相反的转换。 Dim intSource As Long, bytBCD(4) As Byte, i As Long, strTmp As StringFor i = 0 To 3 strTmp = strTmp & Right("0" & Hex(bytBCD(i)), 2) Next i If IsNumeric(strTmp) Then intSource = Val(strTmp)
Option Explicit
Dim bytSj(1 To 4) As BytePrivate Sub Command1_Click()
Dim i As Long
Dim lnSj As Long
lnSj = 99999998
For i = 1 To Len(CStr(lnSj)) Step 2
bytSj((i + 1) / 2) = Val("&H" & (Mid(CStr(lnSj), i, 2)))
Next
For i = 1 To 4
Print bytSj(i)
Next
End SubPrivate Sub Command2_Click()
Dim sj As String
Dim i As Long
Dim lnSj As Long
For i = 1 To 4
sj = sj & Hex(bytSj(i))
Next
Print CLng(sj)
End Sub
Private Sub Command1_Click()
Dim a As Integer, n As Integer
Dim b As Integer, c As Integer
Dim i As Integer
a = 3: n = 15
For i = 1 To n
b = a \ 2
c = (a Mod 2) * (2 ^ 14)
a = c + b
Debug.Print a
Next
End Sub
dim v1 as long
dim v2 as long
do
if n<0 then n=n+16 else exit do
loop
n=n mod 16
select n
case 0
ROR=v
case 1
v1=(v and &H1&) * &H8000&
v2=v \ &H2&
ROR=v1 or v2
case 2
v1=(v and &H3&) * &H4000&
v2=v \ &H4&
ROR=v1 or v2
case 3
v1=(v and &H7&) * &H2000&
v2=v \ &H8&
ROR=v1 or v2
case 4
v1=(v and &HF&) * &H1000&
v2=v \ &H10&
ROR=v1 or v2
case 5
v1=(v and &H1F&) * &H800&
v2=v \ &H20&
ROR=v1 or v2
case 6
v1=(v and &H3F&) * &H400&
v2=v \ &H40&
ROR=v1 or v2
case 7
v1=(v and &H7F&) * &H200&
v2=v \ &H80&
ROR=v1 or v2
case 8
v1=(v and &HFF&) * &H100&
v2=v \ &H100&
ROR=v1 or v2
case 9
v1=(v and &H1FF&) * &H80&
v2=v \ &H200&
ROR=v1 or v2
case 10
v1=(v and &H3FF&) * &H40&
v2=v \ &H400&
ROR=v1 or v2
case 11
v1=(v and &H7FF&) * &H20&
v2=v \ &H800&
ROR=v1 or v2
case 12
v1=(v and &HFFF&) * &H10&
v2=v \ &H1000&
ROR=v1 or v2
case 13
v1=(v and &H1FFF&) * &H8&
v2=v \ &H2000&
ROR=v1 or v2
case 14
v1=(v and &H3FFF&) * &H4&
v2=v \ &H4000&
ROR=v1 or v2
case 15
v1=(v and &H7FFF&) * &H2&
v2=v \ &H8000&
ROR=v1 or v2
end select
end function想要2和3的答案,再给200分吧。
Dim a As Long, i As Integer
Dim b(1 To 4) As Byte, tmp As String
a = 5556633
tmp = Format(a, "00000000")
For i = 1 To 4
b(i) = Val("&H" & Mid(tmp, i * 2 - 1, 2))
Debug.Print Hex(b(i)) & "--" & b(i)
Next
tmp = ""
For i = 1 To 4
tmp = tmp & Hex(b(i))
Next
Debug.Print Val(tmp)
End Sub
Dim v1 As Long
Dim v2 As Long
Do
If n < 0 Then n = n + 16 Else Exit Do
Loop
n = n Mod 16
Select Case n
Case 0
ROR = v
Case 1
v1 = (v And &H1&) * &H8000&
v2 = v \ &H2&
ROR = v1 Or v2
Case 2
v1 = (v And &H3&) * &H4000&
v2 = v \ &H4&
ROR = v1 Or v2
Case 3
v1 = (v And &H7&) * &H2000&
v2 = v \ &H8&
ROR = v1 Or v2
Case 4
v1 = (v And &HF&) * &H1000&
v2 = v \ &H10&
ROR = v1 Or v2
Case 5
v1 = (v And &H1F&) * &H800&
v2 = v \ &H20&
ROR = v1 Or v2
Case 6
v1 = (v And &H3F&) * &H400&
v2 = v \ &H40&
ROR = v1 Or v2
Case 7
v1 = (v And &H7F&) * &H200&
v2 = v \ &H80&
ROR = v1 Or v2
Case 8
v1 = (v And &HFF&) * &H100&
v2 = v \ &H100&
ROR = v1 Or v2
Case 9
v1 = (v And &H1FF&) * &H80&
v2 = v \ &H200&
ROR = v1 Or v2
Case 10
v1 = (v And &H3FF&) * &H40&
v2 = v \ &H400&
ROR = v1 Or v2
Case 11
v1 = (v And &H7FF&) * &H20&
v2 = v \ &H800&
ROR = v1 Or v2
Case 12
v1 = (v And &HFFF&) * &H10&
v2 = v \ &H1000&
ROR = v1 Or v2
Case 13
v1 = (v And &H1FFF&) * &H8&
v2 = v \ &H2000&
ROR = v1 Or v2
Case 14
v1 = (v And &H3FFF&) * &H4&
v2 = v \ &H4000&
ROR = v1 Or v2
Case 15
v1 = (v And &H7FFF&) * &H2&
v2 = v \ &H8000&
ROR = v1 Or v2
End Select
End Function
intLeft = intSource Mod (2 ^ N)
strTmp = CStr(intLeft) & CStr(intRight)intSource = Val(strTmp)循环右移可以造成溢出。楼主自己增加一点处理吧。2、将8位整数(如99999999)转BCD码的代码,转换完之间应该为4字节(如99999999转换完后,每个字节存放的数值应为&h99=153)Dim intSource As Long, bytBCD(4) As Byte, i As Long, strTmp As StringstrTmp = CStr(intSource)
For i = 0 To 3
bytBCD(i) = Val("&H" & Mid(strTmp, i * 2 +1, 2))
Next i
3、将BCD码转长整数的代码,即与2中相反的转换。
Dim intSource As Long, bytBCD(4) As Byte, i As Long, strTmp As StringFor i = 0 To 3
strTmp = strTmp & Right("0" & Hex(bytBCD(i)), 2)
Next i
If IsNumeric(strTmp) Then intSource = Val(strTmp)
http://topic.csdn.net/u/20101202/07/cd95e8e0-8d4e-4cea-9fb4-0433d769adcf.html?43785