如何随机得到一个16位的16进制数? ( 积分: 50 )

  • 主题发起人 主题发起人 有毛病
  • 开始时间 开始时间

有毛病

Unregistered / Unconfirmed
GUEST, unregistred user!
如果是10进制数呢?又如何得到?
 
random函数得到十进制的随即数,你转换一下不就是16进制的了么?
 
苯方法,算出16位16进制数的10进制范围,然后随机,然后转换。。。。是不是有点太笨了 。。。。。
 
笨方法

procedure TForm1.Button1Click(Sender: TObject);
var
v_Temp: TStringList;
i: Integer;
Temp: String;
begin
v_Temp := TStringList.Create;
v_Temp.Add('0');
v_Temp.Add('1');
v_Temp.Add('2');
v_Temp.Add('3');
v_Temp.Add('4');
v_Temp.Add('5');
v_Temp.Add('6');
v_Temp.Add('7');
v_Temp.Add('8');
v_Temp.Add('9');
v_Temp.Add('A');
v_Temp.Add('B');
v_Temp.Add('C');
v_Temp.Add('D');
v_Temp.Add('F');

Temp := '';
Randomize;
for i := 1 to 4 do
begin
Temp := Temp + v_Temp[Random(15)];
end;

ShowMessage(IntToStr(StrToInt64('$' + Temp))); //转换为10进制

v_Temp.Free;
end;
 
有毛病,请看:
randomize;
i:=random($ffff);
showmessage(inttohex(i,4));
 
Randomize;
ShowMessage(IntToHex(Random(65535), 4));
 
所谓的16进制,10进制只是显示的方式而已。
你16位的16进制表达上就是一种错误。16位是指的2进制有16位。16进制只是显示上的问题而已。
就好想8,按照16位,那2进制就0000-0000-0000-1000,16进制就是0x0008,10进制就是8。
在计算机内表示都是用2进制的。所以只要生成随即数,转换就可以了。

记住:计算机永远只有2进制!!
 
简单,生成16次16位的单个字符,拼起来,再转换
 
后退
顶部