还是关于string,pchar,char的问题(50分)

  • 主题发起人 主题发起人 孤云
  • 开始时间 开始时间

孤云

Unregistered / Unconfirmed
GUEST, unregistred user!
Comstr:String;
Comcha:Char;
sizbuff:Cardinal;
strbuff:Pchar;
m_Buff:pchar;
事情是这样的,我从串口中获取数据,
Comstr:='';
WHILE ComPort1.CharReady DO
BEGIN
Comcha:=Comport1.GetChar;
Comstr:=Comstr+IntToHex(Ord(Comcha),2)+' '
Inc(RcData);
END;
然后将获取的字符串付给strbuff,然后进行写操作,
GetMem(strbuff,length(Comstr));
StrPCopy(strbuff,Comstr);
Write(strbuff,sizbuff);

procedure Write(pBuff: PChar
uiCount: Cardinal);
var
i: integer;
begin
for i := 0 to uiCount do
begin
m_Buff[m_uiHead]:=pBuff;//为什么在这地方pBuff付给m_Buff只有一半,如
//pBuff=‘fc 00 00’但m_Buff[1]:=pBuff[1]时,m_Buff[1]=‘f’
m_uiHead := (m_uiHead + 1) mod CN_MAX_BUFFER_SIZE;
end;
end;
请问我哪地方出错了!
 
要是pBuff:array[1..16] of char
procedure Write(pBuff: //请问这里该怎么定义
uiCount: Cardinal);
 
不行啊
提示
array type required
function crc16(pData: PChar
len: word):Word;
var
k: shortint
//-128..127
crc: word
//0..65535整型
begin
crc := 0;
for k := 0 to len - 1 do
begin
crc := (crc shl 8) xor crc16_tab[(crc shr 8) xor ord(pData[k])];//pData[k]需要char类型
end;
result := crc;
end;
 
赋值时改成直接方式试试
strbuff:=Comstr;
 
在delphi中
procedure doack(port:integer)
var
buff:array[0..16] of char
begin
buff[0]:=1;
...
buff[9]:=9;
WriteCom(port, Buff, 10);
end;
procedure writecom(port:Integer;SndBuff:PChar;Count:Integer)
begin //上面的buff为array,这边sndbuff用pchar行吗?

end;
 
可以的.
但你上面的写法有点问题
for i:=0 to 9 do
buff:=Char(i)
//这里一定要把Integer转换成字符型数据才可以赋值
WriteCom(port,PChar(Buff),10);//这里要取得Array第一个元素的地址才可以传递参数
//这个是传递形参可以Pointer(Buff)或者@Buff[0]取 代PChar(Buff).如果是实参的话,参数类型就要严格匹配,只能用PChar(Buff)了
 
IntToHex(Ord(Comcha),2)
把Comcha的值变成了两个字符.如comcha值$F1,经函数转换后变成了
'F1'两个字符了.
 
多人接受答案了。
 
后退
顶部