delphi array of char 类型从TBytes类型中取值的问题
varbuf:TBytes;workstring:arryeofChar;beginidTCPClient.IOHandler.ReadBytes(buf,66,fals...
var
buf: TBytes;
workstring: arrye of Char;
begin
idTCPClient.IOHandler.ReadBytes(buf,66,false);
setlenght(workstring,7);
move(buf[29],workstring,7);
end;
取不到数据,高手帮看一下,是哪里写错了
var
buf: TBytes;
workstring: arrye of Char;
begin
idTCPClient.IOHandler.ReadBytes(buf,66,false);
setlength(workstring,7);
move(buf[29],workstring,7);
end; 展开
buf: TBytes;
workstring: arrye of Char;
begin
idTCPClient.IOHandler.ReadBytes(buf,66,false);
setlenght(workstring,7);
move(buf[29],workstring,7);
end;
取不到数据,高手帮看一下,是哪里写错了
var
buf: TBytes;
workstring: arrye of Char;
begin
idTCPClient.IOHandler.ReadBytes(buf,66,false);
setlength(workstring,7);
move(buf[29],workstring,7);
end; 展开
2个回答
展开全部
1、把move(buf[29],workstring,7)改成Move(buf[29], workstring[0], 7)或者Move(buf[29], PChar(workstring)^, 7);
2、由于workstring声明为动态数组,所以workstring实际上是一个指针,字符的实际存储是从workstring[0]开始的。
3、PChar不仅仅是一种类型,在编译器的作用下,它更像一个函数;对于普通的动态数组,它可以把数组变量强行转化为它的本来面目——指针;对于string这种特殊的动态数组(在计数引用、字串长度之后才是字符数组),PChar会自动帮助你跨过计数引用、字串长度等存储空间,指向真正的字符数组首地址。
4、Delphi中最垃圾的事情就是全面改成Unicode版本,外加TBytes等一堆一堆的狗屎。
2、由于workstring声明为动态数组,所以workstring实际上是一个指针,字符的实际存储是从workstring[0]开始的。
3、PChar不仅仅是一种类型,在编译器的作用下,它更像一个函数;对于普通的动态数组,它可以把数组变量强行转化为它的本来面目——指针;对于string这种特殊的动态数组(在计数引用、字串长度之后才是字符数组),PChar会自动帮助你跨过计数引用、字串长度等存储空间,指向真正的字符数组首地址。
4、Delphi中最垃圾的事情就是全面改成Unicode版本,外加TBytes等一堆一堆的狗屎。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
什么问题啊 看看我能不能解决
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询