标题:VFP有没有10进制转16进制的函数?
只看楼主
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:0 
因为没有掌握transform函数用法,走了很多弯路,哈哈哈。。。
PARAMETERS nnum
creturn="0x"
cstr=""
DO WHILE .t.
    nhex=MOD(nnum,16)
    n=INT(nnum/16)
    IF nhex>9
        cstr=CHR(nhex+55)+cstr
    else   
        cstr=TRANSFORM(nhex)+cstr
    endif   
    IF n>=16
        nnum=n
        LOOP
    ELSE
        EXIT
    ENDIF
ENDDO
IF n#0
    IF n>9
        creturn=creturn+chr(n+55)+cstr
    ELSE
        creturn=creturn+TRANSFORM(n)+cstr   
    ENDIF   
else   
    creturn=creturn+cstr
ENDIF
   
RETURN creturn

谢谢各位
2023-01-24 20:23
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 11楼 sam_jiang
思路没错,可以用数据结构优化一下算法,如:
num = 1234567890
ALINES(aHex,"0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F",",")
DO WHILE num > 0
    ? aHex[num%16+1]
    num = INT(num/16)
ENDDO
2023-01-24 22:03
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:0 
回复 12楼 吹水佬
简洁明了!
2023-01-24 22:47
sam_jiang
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:542
专家分:781
注 册:2021-10-13
得分:0 
以下是引用sam_jiang在2023-1-24 22:47:15的发言:

简洁明了!

漏了一个num=0的情况。

PARAMETERS num
*num = 1234567890
creturn=""
ALINES(aHex,"0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F",",")
IF num=0 &&单独提出来运行是不是会快点?
    RETURN "0x0"
ENDIF
DO WHILE num >0
    creturn=aHex(num%16+1)+creturn
    *? aHex[num%16+1]
*!*    IF num=0 &&运行可能会慢点
*!*        EXIT
*!*    else   
        num = INT(num/16)
*!*    ENDIF   
ENDDO
RETURN "0x"+creturn

[此贴子已经被作者于2023-1-24 23:18编辑过]

2023-01-24 23:11
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:6 
以下是引用sam_jiang在2023-1-24 23:11:59的发言:


漏了一个num=0的情况。

IF num=0 &&单独提出来运行是不是会快点?
    RETURN "0x0"
ENDIF

只要不是在循环体内,速度影响不大。
如果只考虑无符号整数,初始化creturn处理一下就可以:
creturn = IIF(num != 0, "", "0")
DO WHILE num > 0
  ......
ENDDO
RETURN creturn
2023-01-25 07:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511148-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.048049 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved