gpt4 book ai didi

arrays - 将 TArray 分配给 T 数组

转载 作者:行者123 更新时间:2023-12-03 15:46:10 24 4
gpt4 key购买 nike

如何分配 TArray<Byte>array of Byte反之亦然?

TEncoding.UTF8.GetBytes返回 TArray<Byte>TIdHashMessageDigest5.HashBytes有一个TIdBytes = array of Byte作为参数。

我可以将这些类型相互分配吗?也许有副本?或者我需要循环吗?

最佳答案

这些类型与赋值不兼容。在理想的世界中,您会使用 TArray<T>专门的,如果所有图书馆都这样做会更好。我不明白为什么 Indy 坚持在这里使用自己独特的类型。

如果你不能,那么你可以复制一份。用循环就很容易了。如果效率很重要,您可以使用 Move 进行复制。

SetLength(Dest, Length(Source));
Move(Pointer(Source)^, Pointer(Dest)^, Length(Source));

我使用Pointer(arr)^这里而不是arr[0]以避免在空数组的情况下引发范围检查异常。

还可以通过使用类型转换来避免复制,因为所有动态数组都以相同的方式实现。所以你可以写

Hash := HashBytes(TIdBytes(TEncoding.UTF8.GetBytes(...)));

当然,这会放弃类型安全,但是对 Move 的调用也会放弃类型安全。如上所述。

Remy's answer to another question 建议的另一种方法,就是使用TIdTextEncoding而不是TEncoding 。这样您就可以使用TIdBytes独家。

关于arrays - 将 TArray 分配给 T 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41464133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com