怎样才能将十进制转换成这样的十六进制(200分)

  • 主题发起人 主题发起人 snake_she
  • 开始时间 开始时间
S

snake_she

Unregistered / Unconfirmed
GUEST, unregistred user!
因考勤机中存放的是卡号的十六进制,怎样在上传数据时转成卡机能识别的十六进制
请问怎样修改这段程序?

卡号 程序转换的十六进制 卡机中读出的卡号
0026114884 00018E7B44 01018E7B44
0002676459 000028D6EB FF0028D6EB
0002676478 000028D6FE FF0028D6FE


procedure TForm1.Button5Click(Sender: TObject);
begin
edit3.Text :=inttohex(strtoint(edit2.Text),10);
end;

请问这段程序该怎样写?谢谢!
----------------------------------------------
 
你那个01和FF是根据什么得来的?
 
是从卡机内读出的卡号
 
最后面的是卡号是我直接在卡机上刷上去的,就是不知道其中的规律
 
edit1.Text :=inttohex(strtoint(edit2.Text) + $100000000,10) ;
edit1.Text :=inttohex(strtoint(edit2.Text) - $100000000,10) ;

edit1.Text :=inttohex(strtoint(edit2.Text) + $F00000000,10) ;

楼主数据再多点规律就清楚了,可能会最前面的0个数有关
 
好的,我多找几个卡查查规律
 
卡号 程序转换的十六进制 卡机中读出的卡号
0026114884 (IntToHex) 00018E7B44 (第一个字 - 1) 01018E7B44
0002676459 000028D6EB FF0028D6EB
0002676478 000028D6FE FF0028D6FE
 
我只四张测试的卡,对比结果是

卡号 程序转换的十六进制 卡机中读出的卡号
0026114884 00018E7B44 01018E7B44
0002676459 000028D6EB FF0028D6EB
0002676478 000028D6FE FF0028D6FE
1680008933 006422E6E5 886422E6E5 [最前面两位怎么又成88了]
 
输入的十进制卡号不能 > 4294967295
十六进制的卡号=IntToHex(strtoint64('十进制卡号') ,8);
 
IntToHex(Num,2);
 
应该还是高位加一或减一的问题,还是没打出规律。
 
这个问题很简单啊
这是那一家的产品,这么容易就被猜出来
 
标记IntToHex
 
卡号 程序转换的十六进制 卡机中读出的卡号
0026114884 00018E7B44 01018E7B44
0002676459 000028D6EB FF0028D6EB
0002676478 000028D6FE FF0028D6FE
1680008933 006422E6E5 886422E6E5 [最前面两位怎么又成88了]

能猜出来,说出来啊,规律是什么?
 
什么规律啊,我猜不出来,哪位大哥给解了,我急用。
 
你多读了两位
兄弟
Integer占4个字节

或者是其他的可能
前面一个字节是校验位
或者前面一个字节根本就没有用
比如 FF0028D6FE 取后面4个字节是 0028D6FE 也就是你前面的 000028D6FE
 
我试试看,行就散分。
 
感谢各位的鼎力相助 ,iamy兄弟是对的,传8位就可以了,所以散分!
 
后退
顶部