byte类型数据在edit控件的显示(50分)

  • 主题发起人 主题发起人 417556812
  • 开始时间 开始时间
4

417556812

Unregistered / Unconfirmed
GUEST, unregistred user!
temp:byte;
edit1:TEdit;
当temp:= $6d 的时候
我如何在edit控件中显示 6d ?
 
Edit1.Text := Format('%x',[temp]);
 
那么如果
presponsebuffer:pbyte;
presponsebuffer指向一个byte数组,responselenth是数组长度
我写以下代码
i:integer;
str;string;
for i := 0 to (responselenth-1)do
begin
str := Format('%x',[presponsebuffer^]);
inc(presponsebuffer);
memo1.Lines.Add(str);
end;

错误提示:
access violation at address 6045843e in module 'project1.exe'.read of address 00000000
 
你的i用在哪里了
?啊
 
i只是计数,没影响的,关键是你的指针 presponsebuffer^ 指向了错误的地址,过界了。
 
const
responselenth = 10;
var
presponsebuffer:pbyte;
I : Integer;
begin
presponsebuffer := PByte(PChar('0123456789'));
for I := 0 to responselenth - 1do
begin
memo1.Lines.Add(format('%d',[presponsebuffer^]));
Inc(presponsebuffer);
end;
end;
 
我是在智能卡函数的使用中输出的 presponsebuffer

ret := SCardTransmit(cardhandle,sendpci,pinbuffer,sendlength,0,
presponsebuffer,@responselenth);
结果显示ret=0,表示数据发送成功.为何我一操作presponsebuffer^,
比如 str := Format('%x',[presponsebuffer^]);
就会出现 access violation at address 6045843e in module 'project1.exe'.read of address 00000000 的错误
是否因为我没为presponsebuffer指针分配空间?比如
getmem(presponsebuffer,256);
 
刚才的问题解决了
但SCardTransmit函数中
不管pinbuffer输入的是什么命令
得到的presponsebuffer指向的数据永远是 53 8B
这是怎么回事?
 
后退
顶部