Mar*_*ski 1 delphi memorystream unicode-string null-terminated
在Delphi XE中,我从剪贴板中捕获CF_UNICODETEXT数据.结果是一个以两个空字节终止的流.要获取复制到剪贴板的实际字符串,我需要删除空值.
这个类似的问题包含一个从TMemoryStream转换为Delphi的unicode字符串的好方法:
function MemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, M.Size div SizeOf(Char));
end;
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,这将产生一个包含尾随空值的字符串.我可以通过限制大小来解决这个问题:
function ClipboardMemoryStreamToString(M: TMemoryStream): string;
begin
SetString(Result, M.Memory, (M.Size - SizeOf(Char)) div SizeOf(Char));
end;
Run Code Online (Sandbox Code Playgroud)
......但这感觉很难看,"特殊情况".我想知道是否有更简洁的方法对此进行编码,以便后来查看代码的任何人(我!)都不会立即询问"为什么会从流中删除尾随的字符?"
编辑:预先解决问题的一种方法是添加评论.但是,除此之外?
怎么了Clipboard.AsText?它为您完成所有操作,无需流,按字节戳,处理空终止符等.
至于你提出的确切问题,我只想写:
SetString(Result, M.Memory, M.Size div SizeOf(Result[1]) - 1);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3642 次 |
| 最近记录: |