Delphi下的进制转换

经常用到2进制转16进制,十进制转十六进制的,但网上搜的,很多还是觉得不大好用,借鉴了一下别人的代码,并顺便总结一下:
首先,十进制和十六进制之间的转换,实际是比较简单的。
1.十六进制转十进制(加$符号就可以的了): i:=strtoint('$'+HexStr),  HexStr为十六进制字符串,比如1F2D,注意不超过64位,即1个16进制字符代表4位,共不能超过16个十六进制字符,可以在输入edit中限制maxlength=16,就不会转换出错的了。
2.十进制转十六进制:用format,很简单的,但却发现不少人没常用。 HexStr :=Format(‘%x’,[i]); 还可以让Hexstr固定宽度显示(大于固定位则显示整个Hexstr,小于则补0显示),比如:HexStr :=Format(‘%4x’,[i]); 

3.剩下16进制<->2进制互转的问题,结果以前偷懒,网上用的BinToHex还是错误的,而且不容易发现,是偶尔发现的,还是自己重新写了一个。


//16进制转2进制
function HextoBinary(Hex:string;const Spliter:string=''):string;
const
    BinList: array [0..15] of string =
         ('0000','0001','0010','0011',
          '0100','0101','0110','0111',
          '1000','1001','1010','1011',
          '1100','1101','1110','1111');
var
    i:integer;
begin
  Result:='';
  for i:=Length(Hex) downto 1 do
    Result:=BinList[StrToInt('$'+Hex[i])]+Spliter+Result;
end;

//2进制转16进制
function  BinStrToHexStr(BinStr:string;const Spliter:string=''):string;
  function HalfByteStrToHexStr(BinStr:string):string;  //4位二进制转换为半字节,比如1111->F
  const
    BinList: array [0..15] of string =
         ('0000','0001','0010','0011',
          '0100','0101','0110','0111',
          '1000','1001','1010','1011',
          '1100','1101','1110','1111');
  var i,j:Byte;
  begin
    Result :='';
    if Length(BinStr)>4 then Exit;
    for i:=0 to 15 do
      if  BinStr=BinList[i]
      then
        begin
          Result :=Format('%1x',[i]);
          Exit;
        end;
  end;
var  OneByte:Byte;
     i,j,Len:integer;
     OneByteStr,HalfByteStr:string;
begin
  Result :='';
  BinStr :=StringReplace(BinStr,' ','',[rfReplaceAll]); //可以输入空格

  Len := Length(BinStr);
  i := Len mod 4;
  if i<>0                    //若不是刚好4位一组,则需补0
  then
    begin
      for j:=4-i downto 1 do
        BinStr :='0'+BinStr;
    end;

  Len := Length(BinStr);
  while Len>0 do
  begin
    HalfByteStr :=Copy(BinStr,Len-3,4);
    Dec(Len,4);
    Result :=HalfByteStrToHexStr(HalfByteStr)+Result ;
  end;

end;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值