gpt4 book ai didi

.net - 将字节转换为基数的最佳方法是什么,反之亦然

转载 作者:行者123 更新时间:2023-12-02 02:13:06 24 4
gpt4 key购买 nike

我现在有以下代码。

type
TByte4 = array[0..3] of Byte; // 32-bit

function CardinalToBytes(const Data: Cardinal): TByte4;
begin
Result[0] := (Data shr 24) and 255;
Result[1] := (Data shr 16) and 255;
Result[2] := (Data shr 8) and 255;
Result[3] := Data and 255;
end;

function BytesToCardinal(const Data: TByte4): Cardinal;
begin
Result := (Data[0] * 16777216) +
(Data[1] * 65536) +
(Data[2] * 256) +
Data[3];
end;

我想知道这是否是最快、最有效的方法(我确信不是:))。问题是这必须在 Delphi 2006 下的紧凑框架中工作(甚至不用问)。我在 TEA 加密算法中使用它,该算法可与 Delphi 的 Ansi 和 Unicode 版本以及 Delphi 2006 中的 .NET 和 .NET 紧凑框架一起使用。

因此,不允许使用“移动”和类似的使用指针的函数(不,我不想要不安全的代码)。

编辑:

我还没有找到更好的方法来做到这一点。给出了一些很好的建议,但它们在 .NET 中都失败了。我恐怕不会再在死路上度过了。 VCL .NET 已经死了,delphi 中的 CF 恐怕也死了。所以这对于维护这个项目是必须的。如果有人证明我错了并让代码在 .NET 中编译,我仍然会等待一段时间

编辑2:

解决方案很简单,就像在大多数情况下一样。有人只需要寻找明显的解决方案。我只是不再知道 .NET 中有一个 BitConverter 类

最佳答案

在Delphi.NET中,使用.NET框架中的BitConverter类进行转换。请参阅BitConverter Class (System) .

举个例子:

function CardinalToBytes(const Data: Cardinal): TBytes;
begin
Result := BitConverter.ToBytes(Data);
end;

function BytesToCardinal(const Data: TBytes): Cardinal;
begin
Result := BitConverter.ToUInt32(Data, 0);
end;

关于.net - 将字节转换为基数的最佳方法是什么,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1699860/

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