1、该问题困扰了我很久(主要还是基础不牢)。
实现原理:将16进制字符串转换为二进制字符串再去计算。
然后利用二进制的性质(逢二进一)进行转换为10进制。
废话不多说,上代码了。
在这里插入代码片
Char str[] = Upper("0f40fd3e7e11f6b63949e82c2f8c53eda34126ec")
String strtemp = ''
Long ll_row
int ll_number2[],ll_number1[]
str = 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'
For ll_row = 1 To UpperBound(str)
Choose Case str[ll_row]
Case '0'
strtemp += '0000'
Case '1'
strtemp += '0001'
Case '2'
strtemp += '0010'
Case '3'
strtemp += '0011'
Case '4'
strtemp += '0100'
Case '5'
strtemp += '0101'
Case '6'
strtemp += '0110'
Case '7'
strtemp += '0111'
Case '8'
strtemp += '1000'
Case '9'
strtemp += '1001'
Case 'A'
strtemp += '1010'
Case 'B'
strtemp += '1011'
Case 'C'
strtemp += '1100'
Case 'D'
strtemp += '1101'
Case 'E'
strtemp += '1110'
Case 'F'
strtemp += '1111'
End Choose
Next
str = strtemp //转换成二进制数组
For ll_row = 1 to 1010
ll_number2[ll_row] = 0
ll_number1[ll_row] = 0
Next
ll_number2[1] = 1
INt index = 0,li_add_array_length = 1
For ll_row = Upperbound(str) to 1 step -1
If str[ll_row] = '1' Then
For index = 1 to li_add_array_length
ll_number1[index] += ll_number2[index]
If (ll_number1[index] > 9) Then//逢十进一
ll_number1[index + 1] ++;
ll_number1[index] -= 10;
End If
Next
ENd IF
For index = 1 to li_add_array_length//将数据翻倍 1 2 4 8 16
ll_number2[index] += ll_number2[index]
Next
For index = 1 To li_add_array_length
If ll_number2[index] > 9 Then//逢十进一
ll_number2[index] -= 10
ll_number2[index + 1] ++
End IF
Next
If ll_number2[index] <> 0 Then//进位
li_add_array_length++
End IF
Next
strtemp = ''
for ll_row = li_add_array_length to 1 step -1
If strtemp = '' AND ll_number1[ll_row] = 0 Then continue//最高位为0则不放进去
strtemp += String(ll_number1[ll_row])
Next
//Messagebox('',li_add_array_length)
Messagebox('',strtemp)