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;
十六进制转化成二进制
最新推荐文章于 2023-02-06 12:43:11 发布