十六进制字符串、十进制整数、十六进制整数的转换,傻傻分不清楚~
各位,本人编写了一个上位机软件,使用密钥机制验证身份。收到内容为包含4个字节的十六进制数的字符串的密钥种子,如何将其中的十六进制数读出,赋给一个整形变量,经过各种运算,得到一个4个字节的十六进制结果,再将这个结果按字节分别赋给一个数组,发送出去?
示意:
list数组接收到内容为十六进制字符串形式的密钥种子。SeedData为存放密钥种子的整形变量。
SeedData := strtoint('$'+(list[0]+list[1]+list[2]+list[3]));
{下面如何将十进制转成十六进制整数?}
{转换成功后,各种位运算}
{下面将SeedData按字节发送出去}
TransDataBuf[0]:=(SeedData SHR 6); //key
TransDataBuf[1]:=(SeedData SHR 4);
TransDataBuf[2]:=(SeedData SHR 2);
TransDataBuf[3]:=SeedData;
[解决办法]
function IntToHex(Value: Integer; Digits: Integer): string;
上位机啊,嘿嘿,很有意思的。以前写的:
procedure TForm1.btn3Click(Sender: TObject);
var
i,k,t:integer;
j:Extended;
s,st:string;
begin
st:='0000000000000000';
//self.chklst1.Header
self.chklst1.MultiSelect:=True;
//ShowMessage(IntToStr(self.chklst1.Items.count));
self.mmo2.Clear;
//self.chklst1.SelectAll;
j:=0; k:=0;t:=0;
for i:=0 to self.chklst1.Items.Count-1 do
begin
k:=i div 8;
t:=((Self.chklst1.Items.Count-1-i) mod 8)+k*8+1;
//二进制
if self.chklst1.Checked[i] then
begin
self.chklst1.Selected[i]:=True;
s:=st;
s[t]:='1';
st:=s;
self.STBinary.Caption:=Copy(st,1,4)+'_'+copy(st,5,4)+'_'+copy(st,9,4)+'_'+copy(st,13,4);
end;
if self.chklst1.Checked[i] then
begin
//十进制
if not self.chklst1.Checked[7] then
begin
j:=j+Power(2,(16-t));
end
else
begin
j:=j-Power(2,(16-t))-2;
end;
//八进制
//十六进制
//输出位置
s:='';
s:=inttostr(16-((Self.chklst1.Items.Count-1-i) mod 8)-k*8-1);
//s:='M'+inttostr(3+(i div 8))+'.'+inttostr((i mod 8))+'=1';
self.mmo2.Lines.Add(s);
//ShowMessage(self.chklst1.Items[i]);
end;
s:=IntToStr(round(j));
self.STInt.Caption:=format('%.5d',[Round(j)]);
self.STWord.Caption:=IntToHex(round(j),4);
end;
end;
原理一样,随便转换。
[解决办法]
http://www.cnblogs.com/ywangzi/archive/2011/12/22/2297500.html
http://apps.hi.baidu.com/share/detail/33715335
我替你百度的,但不知哪个是你想要的。虽然你问题不是很明确,但这两个说明很明了。