织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>杂项技术>PC常识>

十六进制与十进制的互相转换

罗索客 发布于 2003-10-08 11:17 点击:次 
作者:红虎 *-- 进制转换: 十六进制到十进制 *-- 程序思路:将一个十六进制数,依次从左到右将其各自的数据乘以16的 n 次幂, * 这里 n 的取值为:从右往左起顺序排列数再减去 1, 如 123 那么1排第2位, * 2排第1位,3排第0位, 如果有小数位,那么依次从小数点往后是
TAG:

作者:红虎

*-- 进制转换: 十六进制到十进制
*-- 程序思路:将一个十六进制数,依次从左到右将其各自的数据乘以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, 最后是将他们的和全部加起来。
*   注意: 这里只是针对整数部分处理。
*-- 程序员: 红虎 于 2001年5月9日


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 时退出循环处理。
*-- 程序员: 红虎 于 2001年5月9日


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

(红虎)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/200310/2384.html]
本文出处: 作者:红虎
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容