【问题标题】:Using Byte[] in delphi在 delphi 中使用 Byte[]
【发布时间】:2015-11-05 12:08:18
【问题描述】:

我有一个 c# 项目,我正在尝试将其转换为 Delphi。

我有一个函数addcoord

public static byte[] addCoord(Coordinate C, int ID)
{
    //Create an empty array of length 10
    byte[] ret = new byte[10];

    ret[0] = Convert.ToByte(newClass.Add);
    ret[1] = Convert.ToByte(ID);
    ret[2] = BitConverter.GetBytes(C.X)[0];
    //High-Byte of uInt16 X
    ret[3] = BitConverter.GetBytes(C.X)[1];
    //Low-Byte of uInt16 Y
    ret[4] = BitConverter.GetBytes(C.Y)[0];
    //High-Byte of uInt16 Y
    ret[5] = BitConverter.GetBytes(C.Y)[1];
    ret[6] = C.Red;
    ret[7] = C.Green;
    ret[8] = C.Blue;
    ret[9] = C.Master;

    return ret;
}

在 Delphi 中是否有与此等价的功能?

【问题讨论】:

    标签: c# delphi byte bytearray


    【解决方案1】:

    C# 中 byte[] 的 Delphi 等价物是 array of byte。 您可以使用固定大小:

    var
      buffer = array[0..9] of byte;
    

    或动态大小

    type
      TByteArray = array of byte;
    
    function AddCoord(const C: TCoordinate; ID: integer): TByteArray;
    begin
      SetLength(Result, 10); 
    
      Result[0] := C.Red; 
      Result[1] := C.Green; 
    end;
    

    对于一些基本类型,还有一些应该优先使用的预定义数组类型。例如TBytes

    Delphi 2009 中引入了泛型。如果您至少在使用这个版本,您应该更喜欢使用TArray<T>。例如TArray<integer>TArray<TMyType>

    【讨论】:

    • Delphi 内置类型TBytes 用于动态字节数组,无需引入用户类型TByteArray = array of byte;
    • 谢谢。我只是想展示如何自己创建一个数组类型。但是,是的,你是对的。
    • TBytesTArray<Byte> 将更容易与其他库中的代码进行交互。
    • 不,你的例子很糟糕。开放数组非常有用。他们可以接受静态数组和动态数组。它们更加灵活。不过,您确实需要停止制作低效的副本。使用const。您可以像这样实现开放数组版本:function Foo(const Arr: array of Integer): Integer; begin Result := Length(Arr); end;
    猜你喜欢
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多