delphi - TArray<字节> VS TBytes VS PByteArray

标签 delphi delphi-2010

这 3 种类型非常相似...

TArray 是 TBytes 的通用版本。 两者都可以转换为 PByteArray 并用作调用 Windows API 的缓冲区。 (与字符串到 Pchar 具有相同的限制)。

我想知道的是:这种行为是“设计使然”还是“实现使然”。或者更具体地说,它会在未来的版本中出现故障吗?

//编辑 正如下面所说... 我真正想知道的是:就前向兼容性而言,将 TBytes(或 TArray)类型转换为 PByteArray 与将 String 类型转换为 PChar 一样安全吗? (或者也许 AnsiString 到 PAnsiChar 是一个更好的例子 ^_^)

最佳答案

简单来说,字节数组就是字节数组,只要字节和数组的定义不改变,这个也不会改变。只要您确保遵守数组边界,您就可以安全地以这种方式使用它,因为将其从 Delphi 的数组类型中转换出来会使您的边界检查无效。

编辑:我想我现在更好地理解你的要求了。

不,您不应将动态数组引用强制转换为 C 样式数组指针。您可以使用字符串来摆脱它,因为编译器可以帮助您一些。

不过,您可以做的是将指向动态数组的元素 0 的指针转换为 C 样式数组指针。这起作用,并且不会改变。

关于delphi - TArray<字节> VS TBytes VS PByteArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427506/

相关文章:

virustotal api 的 Json 解析结果

arrays - Delphi中的关联数组,带有字符串键的数组可以吗?

sql-server - 为什么带有日期/时间值的 TADOTable 中的 Locate() 不起作用

Delphi - Graphics32,在JPG上绘制多个透明PNG作为水印

delphi - 程序关闭期间出现异常 "MouseTrackingTimerList.Count <> 0"

delphi - 更改Delphi 10.1 Berlin中的启动表格

delphi - 如何在客户端仍处于连接状态时更新 DataSnap 服务器?

delphi - bool 值的类默认属性设置为 true 在运行时给出 false

Delphi 和 MSG 文件

delphi - 如何更改 Delphi 中主菜单项的字体大小?