急![在线等] string和pchar的混用(20分)

  • 主题发起人 主题发起人 涅磐的凤凰
  • 开始时间 开始时间

涅磐的凤凰

Unregistered / Unconfirmed
GUEST, unregistred user!
下面这段代码是小弟从项目程序里面简化来的,在项目里面总是报错,有时候结果不是我要的。
.......一时抓不出错误,肯请各位高手帮忙修正 ResetPort 函数


[一]
我从INI文件里面读取一行字符存储到一个叫up的string类型里面
up: string;

.......
Inif := TIniFile.Create(path);
up := IniF.ReadString('PTZ-2 Key Code', 'UP', '');
.......


[二]
//----------------------------------
INI文件(ini.ini),内容如下
[PTZ-2 Key Code]
UP=FF 05 00 08 32 20 5F
//----------------------------------

现在我想动态改变 "05&quot
这个数字,比如改成01,03,11,19。。。。。
并且把改变后的字符串存放到另外一个叫 tmpUp 的 string 变量里面

tmpUp: string;
tmpUp := ResetPort(up);


[三]
代码如下:
//--------------------------------------------------------------------------
sel_port: array[0..1] of char

sel_port是一个事先定义好的共有变量,存储了2个数字字符(比如01,03,11,19.......)
up字符串里的第三位和第四位即(05)要改变为sel_port[0]和sel_port[1]
//--------------------------------------------------------------------------


function ResetPort(iString: String): String;
var
iHexString: array[0..255] of char;
begin
//将 up 字符串内的字符拷贝给一个char数组
lstrcpy(iHexString, PChar(iString))


//动态改变数组里的第三位和第四位
iHexString[3] := sel_port[0]
//sel_port: array[0..1] of char
iHexString[4] := sel_port[1];

//得到改变后的结果
Result := iHexString;
end;
 
不用搞得这么复杂呀
tmpUp := up;
ts:='05'
if length(tmpup)>=4 then
begin
tmpUp[3] := ts[1];
tmpUp[4]:=ts[2]

end;
 
写一个比较通用的函数吧
function ResetPort(aSource:string;aSubStr:String;index:integer):string;
var
i:integer;
begin
if Length(aSource)<Length(aSubStr)+Index then
SetLength(aSource,Length(aSubStr)+Index);
for i := 1 to Length(aSubStr) do
aSource[Index+i-1]:=aSubStr
end;

基本上就是这样了,其实 Delphi应该有类似的函数的。
 
接受答案了.
 
后退
顶部