十六进制转化成二进制

function HexToBinText(sIn: String): String;
const
  HEX_BINSTR_Prefx:
array [0..15] of String[4] ='0000'
                                                  ,
'0001'
                                                  ,
'0010'
                                                  ,
'0011'
                                                  ,
'0100'
                                                  ,
'0101'
                                                  ,
'0110'
                                                  ,
'0111'
                                                  ,
'1000'
                                                  ,
'1001'
                                                  ,
'1010'
                                                  ,
'1011'
                                                  ,
'1100'
                                                  ,
'1101'
                                                  ,
'1110'
                                                  ,
'1111');
  HEX_BINSTR:
array [0..15] of String[4] =''
                                            ,
'1'
                                            ,
'10'
                                            ,
'11'
                                            ,
'100'
                                            ,
'101'
                                            ,
'110'
                                            ,
'111'
                                            ,
'1000'
                                            ,
'1001'
                                            ,
'1010'
                                            ,
'1011'
                                            ,
'1100'
                                            ,
'1101'
                                            ,
'1110'
                                            ,
'1111');
var
  sOut: String;
  pIn,pOut: Pchar;
  Index, I, iCount, iLen: Integer;
begin
  Result :
= '';
 
if sIn = '' then Exit;
  I :
= Length(sIn);
  pIn :
= PChar(sIn);
  iCount :
= I * 4;
 
case pIn^ of
   
'0':Dec(iCount, 4);
   
'1':Dec(iCount, 3);
   
'2','3':Dec(iCount, 2);
   
'4','5','6','7':Dec(iCount, 1);
   
'8','9','A'..'F','a'..'f':
   
else
      Exit;
 
end;
  SetLength(sOut, iCount);
  pOut :
= PChar(sOut);
  Index :
= 0;
 
case pIn^ of
   
'0':;
   
'1'..'9':Index := Ord(pIn^) - Ord('0');
   
'A'..'F':Index := Ord(pIn^) - Ord('A') + 10;
   
'a'..'f':Index := Ord(pIn^) - Ord('a') + 10;
 
end;
 
if Index <> 0 then begin
    iLen :
= Length(HEX_BINSTR[Index]);
    Move(PChar(HEX_BINSTR[Index])^, pOut^, iLen);
    Inc(pOut, iLen);
 
end;

  Inc(pIn);
  Dec(I);

 
while I > 0 do begin
   
case pIn^ of
     
'0'..'9':Index := Ord(pIn^) - Ord('0');
     
'A'..'F':Index := Ord(pIn^) - Ord('A') + 10;
     
'a'..'f':Index := Ord(pIn^) - Ord('a') + 10
     
else
        Exit;
   
end;
    iLen :
= Length(HEX_BINSTR_Prefx [Index]);
    Move(PChar(HEX_BINSTR_Prefx[Index])^, pOut^, iLen);
    Inc(pOut, iLen);
    Inc(pIn);
    Dec(I);
 
end;
  Result :
= sOut;
end; 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值