【vfp开源代码栏目提醒】:网学会员在vfp开源代码频道为大家收集整理了BinToHex.PRG提供大家参考,希望对大家有所帮助!
PARAMETER cBinValue
IF VARTYPE(cBinValue)#"C" OR EMPTY(cBinValue)
RETURN -1
ENDIF
cBinValue=ALLTRIM(cBinValue)
IF MOD(LENC(cBinValue),4)>0
cBinValue=PADL(cBinValue,INT(LENC(cBinValue)/4)*4+4,"0") &&补足可以省略的前导0
ENDIF
LOCAL cOutHex,i,c4CutString,c1RetrunHex
cOutHex=SPACE(0)
FOR i=0 TO LEN(cBinValue)/4-1
c4CutString=SUBSTR(cBinValue,i*4+1,4) &&截取4位二进制字符
c1RetrunHex=GetHexValue(c4CutString) &&获取1位十六进制字符
IF EMPTY(c1RetrunHex)=.T.
RETURN -1
ENDIF
cOutHex=cOutHex+c1RetrunHex
ENDFOR
IF MOD(LEN(cOutHex),2)=1
cOutHex="0"+cOutHex &&用0补足16进制位数
ENDIF
RETURN cOutHex
************************************************
* 获取1位十六进制字符函数 *
************************************************
PROCEDURE GetHexValue
PARAMETERS cInBinValue
LOCAL cOutHex
DO CASE
CASE cInBinValue=="0000"
cOutHex='0'
CASE cInBinValue=="0001"
cOutHex='1'
CASE cInBinValue=="0010"
cOutHex='2'
CASE cInBinValue=="0011"
cOutHex='3'
CASE cInBinValue=="0100"
cOutHex='4'
CASE cInBinValue=="0101"
cOutHex='5'
CASE cInBinValue=="0110"
cOutHex='6'
CASE cInBinValue=="0111"
cOutHex='7'
CASE cInBinValue=="1000"
cOutHex='8'
CASE cInBinValue=="1001"
cOutHex='9'
CASE cInBinValue=="1010"
cOutHex='A'
CASE cInBinValue=="1011"
cOutHex='B'
CASE cInBinValue=="1100"
cOutHex='C'
CASE cInBinValue=="1101"
cOutHex='D'
CASE cInBinValue=="1110"
cOutHex='E'
CASE cInBinValue=="1111"
cOutHex='F'
OTHERWISE
cOutHex=""
ENDCASE
RETURN cOutHex
ENDPROC