Delphi 如何使IntToBin函数返回96位二进制数?
我有这个函数将整数转换为二进制 Delphi代码: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);
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位的数字进行转换