所有分数求助,Delphi的指针和Pchar问题

echoxh 2005-06-27 02:39:29
已知某个指针Buffer:Pointer,以及这个指针所指向数据的长度BufferLength:Word,我一直是使用一个Pchar类型的变量接受该指针指向的数据,然后直接赋值给String类型的变量,如下:
P:Pchar;
S:String;

begin
P:=Buffer;
S:=P;
end;

现在我发现,当指针指向的内容比较多时,好象在S那里得到的字符串长度没有那么多,谁能帮忙指点一下吗?分数不多,只有这么多了,请原谅。
...全文
311 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzwmjl 2005-07-06
  • 打赏
  • 举报
回复
欢迎加入DELPHI 程序员群 1805366 参加技术讨论 !!
echoxh 2005-07-06
  • 打赏
  • 举报
回复
procedure TFormMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var s:string;
begin
SetLength(s,BufferLength);
move(buffer^,pchar(s[1])^,bufferlength);
showmessage(s);
end

几位大侠,不知道我这样写的是不是能对呢,但实际上我这样运行的时候,执行到Move那一句的时候,会提示“Access violation ad address ……”这类的错误,使用Pchar(Buffer)^也会出现这种提示,是不是我哪的语法还不对呢?
xinqingbucuo 2005-06-29
  • 打赏
  • 举报
回复
setlength(s,bufferlength);
move(pchar(buffer^),pchar(s[1])^,bufferlength);
s可以使string型也可以是 :array of byte;
erace992001 2005-06-29
  • 打赏
  • 举报
回复
我觉得直接MOVE(S[1],Buff^,BufferLen)可以吧,不过得先给S分配内存
  • 打赏
  • 举报
回复
其实可以直接用一个接收结构体去套用的,发送的数据都是遵循一定的排列规则的,比如第一个字节发送的是协议版本号,第二个字节发送的是总的长度等等,我们这里假设结构体如下
TBuff=record
version:byte;
length:byte;
data:array[1..1024] of Char;
end;
PBuff=^TBuff;


var Buff:Pbuff;


Buff:=Buffer;
然后就可以调用了
buff.version
小呆之家 2005-06-27
  • 打赏
  • 举报
回复
var
s:string;

move(pchar(buffer^),pchar(s[1])^,bufferlength);
beyondtkl 2005-06-27
  • 打赏
  • 举报
回复
procedure TFormMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
pbtBuf: PBYTE;

begin
// P;=Buffer;
// ReceiveData := P;
..
对字符串ReceiveData的操作
..
GetMem(pbtBuf, BufferLength + 1);
CopyMemory(pbtBuf, Buffer, BufferLength);
// 现在数据到了 pbtBuf中了 不要用string转换 直接读取 比如用循环进行读取之类的。。
end;

echoxh 2005-06-27
  • 打赏
  • 举报
回复
procedure TFormMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var ReceiveData:string;
P;Pchar;
begin
P;=Buffer;
ReceiveData := P;
..
对字符串ReceiveData的操作
..
end;

看了大侠的贴子,有点似懂非懂,我是初学者,能否请大侠看看这个代码,帮帮忙改写一下,好吗?谢谢
beyondtkl 2005-06-27
  • 打赏
  • 举报
回复
不使用 字符串

使用 byte数组之类的 然后使用
CopyMemory 之类的API函数。。。 进行拷贝

VOID CopyMemory(
PVOID Destination, // pointer to address of copy destination
CONST VOID *Source, // pointer to address of block to copy
DWORD Length // size, in bytes, of block to copy
);

最后一个 就是你的 BufferLength, 然后你直接读取 Destination 里面的值即可 注意不要越界就是 这里也需要这个 BufferLength
echoxh 2005-06-27
  • 打赏
  • 举报
回复
两位大哥说的都对,不过我现在是使用这个东西接收无线Modem收到的短信,中文短信采用了Unicode编码方式,确实是使用了#0作为结尾的。

问题已经知道原因了,如何解决呢,有没有办法使用上那个BufferLength的值呢,还请大侠明示
何鲁青 2005-06-27
  • 打赏
  • 举报
回复
遇到0结束的问题……
beyondtkl 2005-06-27
  • 打赏
  • 举报
回复
string 以 \0, #0 为字符串终结符 虽然Buffer里面 可能比较多
但是 S := P; 后 当系统遇到也只有遇到 \0, #0终结符时,才认为这个字符创结束 然后S的值就是所有前面这些。。
内容概要:本文围绕基于CNN-BiLSTM-Attention混合神经网络模型的电力负荷预测展开研究,提出一种结合卷积神经网络(CNN)、双向长短期记忆网络(BiLSTM)与注意力机制(Attention)的深度学习框架,并通过Python代码实现高精度的短期与超短期负荷预测。该模型充分利用CNN对局部特征的提取能力,捕捉负荷数据中的周期性与趋势性模式;借助BiLSTM对时间序列前后向依赖关系的建模能力,增强对动态变化的感知;并通过Attention机制自适应地聚焦关键历史时刻,提升预测准确性。文中详细阐述了数据预处理、模型结构设计、训练流程及超参数调优方法,并在真实负荷数据集上进行了实验验证,结果表明该混合模型相比传统单一模型和其他基准模型具有更优的预测性能,尤其在应对非线性、非平稳负荷波动方面表现突出。; 适合人群:具备一定Python编程能力和机器学习基础,从事电力系统分析、能源管理、智能电网或时序预测相关工作的科研人员、工程师及高校研究生。; 使用场景及目标:①应用于电网调度、电力市场出清、需求响应管理等场景下的精细化负荷预测;②为研究人员提供一套完整的、可复现的深度学习负荷预测代码框架,推动AI技术在能源领域的落地应用;③帮助理解CNN、BiLSTM与Attention模块之间的协同机制及其在时序建模中的集成方式。; 阅读建议:建议读者结合所提供的Python代码进行动手实践,重点掌握数据归一化、滑动窗口构造、模型搭建与训练技巧,并尝试在不同地区、不同季节的负荷数据上进行迁移测试,以深入理解模型泛化能力与调参策略。
内容概要:本文围绕“MATLAB具有储能的经济调度及机会约束和鲁棒优化”展开,系统研究了电力系统中融合储能技术的经济调度问题,重点探讨了机会约束规划与鲁棒优化方法在应对新能源出力不确定性、负荷波动及系统运行风险中的应用。内容涵盖风光储协同调度、多微网共享储能、电动汽车参与调度、低碳经济调度等多种典型场景,深入分析了储能的选址定容、功率协调控制、状态估计与优化调度模型。核心技术包括粒子群优化(PSO)、分布鲁棒机会约束(DRCC)、模型预测控制(MPC)、鲁棒优化、二阶锥规划(SOCP)等先进算法,并提供了基于Matlab/Simulink的完整仿真代码实现,旨在提升新型电力系统的运行灵活性、经济性与抗风险能力。; 适合人群:具备电力系统、自动化、电气工程或相关专业背景,熟悉Matlab/Simulink仿真环境与基本优化算法,从事新能源并网、微电网运行、储能系统规划、电力市场调度等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习并构建含储能的电力系统经济调度优化模型;② 掌握机会约束与鲁棒优化在处理新能源不确定性问题中的建模思路与求解方法;③ 利用提供的Matlab代码进行算法复现、仿真验证与性能对比,支撑科研项目攻关;④ 为撰写高水平学术论文、学位论文或工程优化方案提供可靠的模型参考与代码支持。; 阅读建议:建议读者结合文档中具体的案例(如风电-水电联合调度、电动汽车集群调度、多微网共享储能等)和配套的Matlab代码进行动手实践,重点关注优化模型的构建逻辑、约束条件设定与求解器配置过程,同时可关注公众号“荔枝科研社”获取完整资源包、复现教程及持续的技术支持。

16,741

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧