十六进制与十进制的互相转换
类别: ASP教程
*-- 进制转换: 十六进制到十进制
*-- 程序思路:将一个十六进制数,依次从左到右将其各自的数据乘以16的 n 次幂,
* 这里 n 的取值为:从右往左起顺序排列数再减去 1, 如 123 那么1排第2位,
* 2排第1位,3排第0位, 如果有小数位,那么依次从小数点往后是-1、-2、-3 ...
* 当处理 A-F 的十六进制数时,需要将他们先转换为 10-16 的数据,这里使用
* 函数 asc(), asc("A") - 55 = 65 - 55 = 10, 最后是将他们的和全部加起来。
* 注意: 这里只是针对整数部分处理。
Func Hex2Dec
para tcHex
tcHex = upper(allt(tcHex))
lnLen = len(tcHex)
lnDec = 0
for n = 1 to lnLen
lcCurChr = substr(tcHex,n,1)
if lcCurChr >= "A"
lnCurNum = asc(lcCurChr) - 55
else
lnCurNum = val(lcCurChr)
endif
lnDec = lnCurNum * 16 ^ ( lnLen - n ) + lnDec
endfor
retu int(lnDec)
*-- 进制转换:十进制到十六进制
*-- 程序思路:
* 将一个十进制数 tnDec 除以16,得到的余数作为当前值:lnCurNum,
* 判断该数是否大于9,一般在 10 ~ 16 他们在十六进制中的取值为 A~F
* 这里的计算可以通过ASCII码进行,使用函数 chr(55+10) = "A",依次类推
* 将所得到的余数 lcCurChr 依次排列起来即得到十六进制结果 lcHex 。
* 而得到的商数继续保留为 tnDec,循环继续处理,当商数为 0 时即退出循环。
*-- 注意: 本程序只是针对整数位处理,小数位处理是依次要乘以16,将得到的
* 整数位依次保留作为十六进制的结果,留下的小数位继续乘以16,循环处理
* 直到小数位为 0 时退出循环处理。
Func Dec2Hex
para tnDec
local lcHex,lnCurNum,lcCurChr
lcHex = ""
do while .T.
lnCurNum = mod(tnDec,16)
if lnCurNum > 9
lcCurChr = chr(lnCurNum + 55)
else
lcCurChr = str(lnCurNum,1)
endif
lcHex = lcCurChr + lcHex
tnDec = int(tnDec/16)
if tnDec <= 0
exit
endif
enddo
retu lcHex
*-- 程序思路:将一个十六进制数,依次从左到右将其各自的数据乘以16的 n 次幂,
* 这里 n 的取值为:从右往左起顺序排列数再减去 1, 如 123 那么1排第2位,
* 2排第1位,3排第0位, 如果有小数位,那么依次从小数点往后是-1、-2、-3 ...
* 当处理 A-F 的十六进制数时,需要将他们先转换为 10-16 的数据,这里使用
* 函数 asc(), asc("A") - 55 = 65 - 55 = 10, 最后是将他们的和全部加起来。
* 注意: 这里只是针对整数部分处理。
Func Hex2Dec
para tcHex
tcHex = upper(allt(tcHex))
lnLen = len(tcHex)
lnDec = 0
for n = 1 to lnLen
lcCurChr = substr(tcHex,n,1)
if lcCurChr >= "A"
lnCurNum = asc(lcCurChr) - 55
else
lnCurNum = val(lcCurChr)
endif
lnDec = lnCurNum * 16 ^ ( lnLen - n ) + lnDec
endfor
retu int(lnDec)
*-- 进制转换:十进制到十六进制
*-- 程序思路:
* 将一个十进制数 tnDec 除以16,得到的余数作为当前值:lnCurNum,
* 判断该数是否大于9,一般在 10 ~ 16 他们在十六进制中的取值为 A~F
* 这里的计算可以通过ASCII码进行,使用函数 chr(55+10) = "A",依次类推
* 将所得到的余数 lcCurChr 依次排列起来即得到十六进制结果 lcHex 。
* 而得到的商数继续保留为 tnDec,循环继续处理,当商数为 0 时即退出循环。
*-- 注意: 本程序只是针对整数位处理,小数位处理是依次要乘以16,将得到的
* 整数位依次保留作为十六进制的结果,留下的小数位继续乘以16,循环处理
* 直到小数位为 0 时退出循环处理。
Func Dec2Hex
para tnDec
local lcHex,lnCurNum,lcCurChr
lcHex = ""
do while .T.
lnCurNum = mod(tnDec,16)
if lnCurNum > 9
lcCurChr = chr(lnCurNum + 55)
else
lcCurChr = str(lnCurNum,1)
endif
lcHex = lcCurChr + lcHex
tnDec = int(tnDec/16)
if tnDec <= 0
exit
endif
enddo
retu lcHex
- 上一篇: ASP中常见的错误80004005信息和解决办法
- 下一篇: DATEDIFF 函数 祥解
-= 资 源 教 程 =-
文 章 搜 索