Delphi 如何使IntToBin函数返回96位二进制数?

Delphi 如何使IntToBin函数返回96位二进制数?,delphi,binary,Delphi,Binary,我有这个函数将整数转换为二进制 Delphi代码: function IntToBin(IValue : uInt; NumBits : word = 64) : string; var RetVar : string; i,ILen : byte; begin RetVar := ''; case NumBits of 32 : IValue := dword(IValue); 16 : IValue := word(IValue);

我有这个函数将整数转换为二进制

Delphi代码:

function IntToBin(IValue : uInt; NumBits : word = 64) : string;
  var RetVar : string;
  i,ILen : byte;
 begin
    RetVar := '';

    case NumBits of
       32 : IValue := dword(IValue);
       16 : IValue := word(IValue);
       8  : IValue := byte(IValue);
     end;

   while IValue <> 0 do
    begin
       Retvar := char(48 + (IValue and 1)) + RetVar;
       IValue := IValue shr 1;
    end;

    if RetVar = '' then
      Retvar := '0';

    Result := RetVar;
end;
函数IntToBin(IValue:uInt;NumBits:word=64):字符串;
var-RetVar:string;
i、 ILen:字节;
开始
RetVar:='';
麻木案
32:IValue:=dword(IValue);
16:IValue:=单词(IValue);
8:IValue:=字节(IValue);
结束;
而伊瓦鲁是这样做的
开始
Retvar:=char(48+(IValue和1))+Retvar;
IValue:=IValue shr 1;
结束;
如果RetVar='',则
Retvar:=“0”;
结果:=RetVar;
结束;
如果IValue=5439788

它返回:

1010011000000101100


我应该更改什么以使其返回96位二进制数?

由于您没有提供
uInt
的声明,我将假定它声明为:

Type
  uInt = record
    lowU,highU: UInt64;
  end;
二进制转换可以如下所示:

function IntToBin(IValue : uInt; NumBits : word = 64) : string;
var
  b: Integer;
const
  HiLo: array[boolean] of Char = ('0','1');

  procedure _IntToBin64(Value: UInt64; num : Integer);
  var
    i: Integer;
    mask: UInt64;
  begin
   mask := UInt64(1) shl (num-1);
   for i := num downto 1 do
   begin
     Inc(b);
     Result[b] := HiLo[(Value and mask) <> 0];
     mask := mask shr 1;
   end;
  end;

begin
  if (NumBits = 0) or (NumBits > 128) then
    Exit('0');
  SetLength(Result,NumBits);
  b := 0;
  if (NumBits > 64) then
  begin
    _IntToBin64(IValue.highU,NumBits-64);
    NumBits := NumBits - 64;
  end;
  _IntToBin64(IValue.lowU,NumBits);
end;
函数IntToBin(IValue:uInt;NumBits:word=64):字符串;
变量
b:整数;
常数
HiLo:Char=('0','1')的数组[boolean];
过程_IntToBin64(值:UInt64;num:整数);
变量
i:整数;
面罩:UInt64;
开始
掩码:=UInt64(1)shl(num-1);
对于i:=num downto 1 do
开始
公司(b);
结果[b]:=HiLo[(值和掩码)0];
掩码:=掩码shr 1;
结束;
结束;
开始
如果(NumBits=0)或(NumBits>128),则
退出('0');
设置长度(结果,NumBits);
b:=0;
如果(NumBits>64),则
开始
_IntToBin64(IValue.highU,NumBits-64);
NumBits:=NumBits-64;
结束;
_IntToBin64(伊瓦鲁、罗湖、纳比茨);
结束;

这将对高达128位的数字进行转换。

由于您没有提供
uInt
的声明,因此我假定它声明为:

Type
  uInt = record
    lowU,highU: UInt64;
  end;
二进制转换可以如下所示:

function IntToBin(IValue : uInt; NumBits : word = 64) : string;
var
  b: Integer;
const
  HiLo: array[boolean] of Char = ('0','1');

  procedure _IntToBin64(Value: UInt64; num : Integer);
  var
    i: Integer;
    mask: UInt64;
  begin
   mask := UInt64(1) shl (num-1);
   for i := num downto 1 do
   begin
     Inc(b);
     Result[b] := HiLo[(Value and mask) <> 0];
     mask := mask shr 1;
   end;
  end;

begin
  if (NumBits = 0) or (NumBits > 128) then
    Exit('0');
  SetLength(Result,NumBits);
  b := 0;
  if (NumBits > 64) then
  begin
    _IntToBin64(IValue.highU,NumBits-64);
    NumBits := NumBits - 64;
  end;
  _IntToBin64(IValue.lowU,NumBits);
end;
函数IntToBin(IValue:uInt;NumBits:word=64):字符串;
变量
b:整数;
常数
HiLo:Char=('0','1')的数组[boolean];
过程_IntToBin64(值:UInt64;num:整数);
变量
i:整数;
面罩:UInt64;
开始
掩码:=UInt64(1)shl(num-1);
对于i:=num downto 1 do
开始
公司(b);
结果[b]:=HiLo[(值和掩码)0];
掩码:=掩码shr 1;
结束;
结束;
开始
如果(NumBits=0)或(NumBits>128),则
退出('0');
设置长度(结果,NumBits);
b:=0;
如果(NumBits>64),则
开始
_IntToBin64(IValue.highU,NumBits-64);
NumBits:=NumBits-64;
结束;
_IntToBin64(伊瓦鲁、罗湖、纳比茨);
结束;
这将对最多128位的数字进行转换