uses
Math;
{
N 进制转 10 进制
ANBaseCode:N 进制码,如 16 进制为 '0123456789ABCDEF',34 进制为 '0123456789ABCDEFGHJKLMNPQRSTUVWXYZ'。也可以自定义,如 'ABC'
ANBaseValue:N 进制值
}
function NBaseToDecimal(const ANBaseCode, ANBaseValue: string): Int64;
var
tmpBaseCodeLen: Integer; {
进制码长度,即计算出是多少进制 }
tmpIdx: Integer; {
第 i 位 N 进制值 }
tmpBaseCharIdx: Integer; {
字符在 N 进制中对应的 10 进制值,如 A 在 16 进制中是 10 }
tmpBaseValueLen: Integer; {
N 进制值长度,先计算出来,循环判断时直接使用即可 }
tmpP: PChar; {
第 i 位 N 进制值指针 }
begin
{
如 16 进制的 75D 转 10 进制的计算过程:
1. 处理数据时从后往前处理,所以先将 16 进制值反转,得 D57
2. 第 1 位 D 在 16 进制中对应的 10 进制值是 13
3. 13 乘以 16 的 1 -1 次方,此值就是 00D 对应的 10 进制值 13
4. 第 2 位 5 在 16 进制中对应的 10 进制值是 5
5. 5 乘以 16 的 2 -1 次方,此值就是 050 对应的 10 进制值 80
6. 第 3 位 7 在 16 进制中对应的 10 进制值是 7
7. 7 乘以 16 的 3 -1 次方,此值就是 700 对应的 10 进制值 1792
8. 把上面得到的各位 10 进制值加起来,便是 16 进制值对应的 10 进制值了:13 +80 +1792 = 1885
03-02
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交