r_j*_*r_j 2 arrays delphi generics
如何指定一个TArray<Byte>,array of Byte反之亦然?
TEncoding.UTF8.GetBytes返回一个TArray<Byte>.TIdHashMessageDigest5.HashBytes有一个TIdBytes = array of Byteas参数.
我可以将这些类型分配给对方吗?也许有副本?或者我需要循环?
这些类型不兼容分配.在一个理想的世界中,你会TArray<T>专门使用,如果所有的图书馆都这样做会更好.我不明白为什么Indy坚持在这里使用自己独特的类型.
如果你不能,那么你可以复制.这很简单,循环.如果效率很重要,您可以使用Move.
SetLength(Dest, Length(Source));
Move(Pointer(Source)^, Pointer(Dest)^, Length(Source));
Run Code Online (Sandbox Code Playgroud)
我Pointer(arr)^在这里使用而不是arr[0]避免在空数组的情况下跳过范围检查异常.
通过使用类型转换也可以避免复制,因为所有动态数组都以相同的方式实现.所以你可以写
Hash := HashBytes(TIdBytes(TEncoding.UTF8.GetBytes(...)));
Run Code Online (Sandbox Code Playgroud)
当然,这会放弃类型安全性,但是Move上面的调用也是如此.
雷米对另一个问题的回答建议的另一种方法是使用TIdTextEncoding而不是TEncoding.这样你就可以TIdBytes独家工作.
| 归档时间: |
|
| 查看次数: |
739 次 |
| 最近记录: |