现在有个循环的有关问题想要解决

现在有个循环的问题想要解决
算法是这样的 给你一个位数不确定的二进制数(大于9位,我们在这里称为A),对100110001做模2运算,算法我简单说一下
就是先取A的前9位,和100110001异或 ,然后得到一个数C,然后用C和A的剩下的几位连接&(就是与A取完9位以后剩下的字符),得到的数就是新的A,继续取新的A的前9位,进行异或(就是这里的循环不会)。直到新的A的位数等于9位停止。
我写的代码是这样的









n=len(Text1.Text)
Q=Mid (Text1.Text,1,9)  '先去输入数字的前九位
s=0
For i =1 To 9
w=Mid (Q,i,1)     '这里是先把输入的二进制数转换为十进制
s=s+2^(n-i)*w
c=s Xor 305       '这里是A的二进制数和B的二进制数进行异或
next i
Do                ’这里是转换回二进制
ch = c Mod 2 & ch
c = c \ 2
Loop Until c = 0
SY= Mid (Text1.Text,10,n-9) '这里是取A中剩下的字符(就是取完前9位的)
NewQ = ch  & SY
写到这里就不知道怎么写了  因为写到这里想要继续做上面的异或
用新产生的Q就是NewQ 继续做取9位的异或

------解决方案--------------------
Option Explicit

Private Function HexToBin(ByVal sHex As String) As String
' 16进制转2进制
    Const s1 As String = "0000101001101111000"
    Const s2 As String = "0125A4936DB7FEC8"
    Dim i As Long, sBin As String
    sHex = UCase(sHex)
    For i = 1 To Len(sHex)
        sBin = sBin & Mid$(s1, InStr(1, s2, Mid(sHex, i, 1)), 4)
    Next
    HexToBin = sBin
End Function

Private Function BinToHex(ByVal sBin As String) As String
' 2进制转16进制
    Const s1 As String = "0000101001101111000"
    Const s2 As String = "0125A4936DB7FEC8"
    Dim i As Long, sHex As String
    sBin = String$(3 - (Len(sBin) - 1) Mod 4, "0") & sBin
    For i = 1 To Len(sBin) Step 4
        sHex = sHex & Mid$(s2, InStr(1, s1, Mid(sBin, i, 4)), 1)
    Next
    BinToHex = sHex
End Function


Private Sub Command1_Click()
   Dim N&, M&, V&, p&
   Dim strBinVal$, strTemp$
   
   Call Randomize
   M = CLng("&H" & BinToHex("100110001"))    ' 预定义常数: 100110001
   'M = 305
   N = Rnd() * 9999999 + 512                 ' 随机产生一个合法数值
   'N = CLng("&H" & BinToHex(Text1.Text))    ' 如果你的数据是在Text1中输入的