16进制的字符串转换问题,有些难(35分)

  • 主题发起人 主题发起人 jadesun
  • 开始时间 开始时间
J

jadesun

Unregistered / Unconfirmed
GUEST, unregistred user!

我想用户输入一串数字后,自动转换成类似下面这样的十六进制字符串,要正好分成像下面这样16位,不足的补成$00。

$00,$01,$00,$00,$53,$74,$61,$6E,$64,$61,$72,$64,$20,$4A,$65,$74

代码应该怎么写呢??不得其解中
 
const HexList: string = ('0123456789ABCDEF');
function HexByte(Hex: byte): string;
begin
Result := HexList[Hex shr 4 + 1] + HexList[Hex and $f + 1];
end;

 
没看明白。
inttoHex(99,4);//='0063'
 
test一下就知道了
 
function myIntToHex(i : Integer) : String;
begin
Result := '$' + IntToHex(i, 2);
end;

这个函数能实现你的要求。
 
procedure TForm1.Button1Click(Sender: TObject);
var
bb: array [0..15] of Integer;
s: string;
ai: Int64;
bi, I: Integer;
begin
FillChar(bb, sizeof(bb), 0);
ai := StrToInt64(Edit1.Text);
I := 15;
s := '';
repeat
bi := ai mod 256;
bb := bi;
ai := ai div 256;
Dec(I);
if I < 0 then
Break;
until (ai = 0) or (I < 0);

for I := 0 to 15 do
Caption := Caption + '$' + IntToHex(bb, 2);
end;
 
上面声明的小了一点,很可能超过16位十进制。
还有这很可能是个超大整数,Int64不一定够用,需要自己处理这个超大整数。
 
to :jsxjd,
你的提问很对,在座demo时我也发现这个问题!我只是想知道这样处理是否jadesun想要的结果。
开始我用的只是Integer,很快发现溢出。有用了Int64,其实也是不够!
如果这时jadesun想要的,就只剩处理超大整数的问题了,不过jadesun没有说明处理的规则!
我想jadesun是要做加密、解密的吧?通过一个长数值串,形成16为密钥。因此长数值串必须有固定的处理规则!
 
多人接受答案了。
 
后退
顶部