![]() |
Funktion Parameter zuweisen (Array of Byte)
Ich habe folgende Typdeklaration:
Delphi-Quellcode:
types
RLInformation = record case boolean of true : (rawSet : Array [0..7] of Byte); false: ( RNCID: Array [0..1] of Byte; CellID: Array [0..1] of Byte; BTSNumber: Array [0..1] of Byte; CPICHEc_N0: Byte; HSDPAIndicator: Byte; ) end; Damit mappe ich ein Array auf verschieden kleine Arrays. Nun will ich mit folgender Funktion z.B die CellID bekommen. Also übergebe ich der Funktion ein Array of Byte und will sie Funktionsintern der Variable RLInfo.rawSet (ist auch ein Array of Byte).
Delphi-Quellcode:
Nur mosert Delphi da.
function getCellID(RLData: Array of Byte):Word;
var RLInfo: RLInformation; // i:Byte; begin // for i:=0 to High(RLData) do // RLInfo.rawSet[i]:= RLData[i]; RLInfo.rawSet:=RLData; //<----------incompatible types result:= StrToInt('$'+IntToHex(RLInfo.cellID[0],2)+IntToHex(RLInfo.cellID[1],2)); if result = High(Word) then result := 0; end; Wenn ich die Wert einzeln übergebe klappt das. Ist mir aber zu Zeitintensiv. Weiß jemand aus dem Forum Rat? Grüße und Danke Klaus |
Re: Funktion Parameter zuweisen (Array of Byte)
mach hier mal einen typ draus:
Delphi-Quellcode:
// RLData: Array of Byte
type meinRLData = Array of Byte; function getCellID(RLData: meinRLData ):Word; |
Re: Funktion Parameter zuweisen (Array of Byte)
Hallo,
es gibt für Dein Problem zwei Lösungen: Die erste Lösung hast Du schon benannt. Sonderlich langsam ist das bei acht Bytes eigentlich nicht. Die zweite Lösung wäre, einfach ![]() @generic: array of Byte <> array [0..7] of Byte; Das Erste ist eigentlich nur ein Pointer, das zweite sind tatsächlich 8 Byte. Gruß xaromz |
Re: Funktion Parameter zuweisen (Array of Byte)
Delphi-Quellcode:
Move(RLData[0], RLInfo.rawSet[0], sizeof(RLInfo.rawSet));
|
Re: Funktion Parameter zuweisen (Array of Byte)
@xaromz und shmia
danke klappt gut damit. @generic Dein Vorschlag bringt auch eine TypInkompatibilität. @xaromz Zitat:
4 mal aufgerufen. Grüße Klaus |
Re: Funktion Parameter zuweisen (Array of Byte)
ich muss zugeben ich habe den source nicht ganz gelesen gehabt und es auch nicht im komplierer ausprobiert.
*schäm* die stichwörter auf meine antwort waren: delphi meckert und ich hab den procedurekopf gesehen. so im nachhinein - meine antwort hat mit diesem thread nichts zu tun. typeninkopatiblität - klar!
Delphi-Quellcode:
ist ungleich
(rawSet : Array [0..7] of Byte);
Delphi-Quellcode:
du kannst natürlich daraus machen:
meinRLData = Array of Byte;
Delphi-Quellcode:
dann funktioniert zumindest deine zuweisung hier:
meinRLData = Array [0..7] of Byte;
Delphi-Quellcode:
RLInfo.rawSet:=RLData;
|
Re: Funktion Parameter zuweisen (Array of Byte)
Hallo!
Warum arbeitest Du mit einen Array of Byte, wenn doch eigentlich Dein RLInformation Record benutz werden soll? Erzeuge doch direkt ein Array of RLInformation... Grüsse Frank |
Re: Funktion Parameter zuweisen (Array of Byte)
@Mavarik
nun, ich habe eine Datensatz der besteht aus 176 Byte Diese lese ich ein ein Array ein: Die Datensatzstruktur ist die folgende:
Delphi-Quellcode:
Wie man hier sieht ist RLInformation ein Array [0..7] of Byte.TKDUSet = record case boolean of true: (rawSet: Array [1..176] of Byte); false: ( //Gap: Array [1..60] of Byte; //FileManagementData: Array[1..12] of Char; FaultType: Byte; Direction: Byte; MessageNumber: Array [0..1] of Byte; TargetNode: Array [0..15] of Byte; Cause : Array [0..7] of Byte; Time : Array [0..7] of Byte; S_RNTI: Array [0..3] of Byte; RNCType: Byte; UEState: Byte; MainProcedure: Byte; Reserved : Byte; DRNCProcedure: Byte; DRNCState: Byte; MUEProcedure: Byte; MUEState : Byte; CRLProcedure: Byte; CRLState: Byte; TBProcedure: Byte; TBState: Byte; RACInstanceGroupID: Byte; RACInstanceProcessID: Byte; RACInstanceUEInstance: Array [0..1] of Byte; RRCEstablishmentCause: Byte; UEIDType: Byte; UEID: Array [0..7] of Byte; UEReleaseIndicator: Byte; HSDPAState: Byte; ServiceType: Array [0..1] of Byte; ULTFCSType: Byte; DLTFCSType: Byte; RLInformation: Array [0..3] of Array [0..7] of Byte; HWInformationDCCH: Array [0..23] of Byte; HWInformationServiceType: Array [0..1] of Array [0..23] of Byte; ) end; RLInformation ist wieder ein eigener Datensatz:
Delphi-Quellcode:
Ich arbeite hier mit Records weil ich dann einfacher auf die einzelnen Datenfelder zugreifen kann
RLInformation = record
case boolean of true : (rawSet :Array [0..7] of Byte); false: ( RNCID: Array [0..1] of Byte; CellID: Array [0..1] of Byte; BTSNumber: Array [0..1] of Byte; CPICHEc_N0: Byte; HSDPAIndicator: Byte; ) end; ohne immer in dem Array hin und her zu springen. Hierzu bieten sich, meiner Meinung nach, variante Records an. Denn man kann hier relative einfach das Mapping von Datensatz auf Datenfelder vornehmen. Ich bin damit auch relative unabhängig wenn sich die Datenstruktur innerhalb z.B. RLInformation ändert. Ich brauche dann, entsprechend nur die Recordstruktur ändern. Grüße Klaus |
Re: Funktion Parameter zuweisen (Array of Byte)
hmm verstehe zwar die Problematik nicht so ganz, aber warum speicherst Du dann nicht den ganzen TKDUSet Record... Hast Doch sowieso eine feste Datensatzlänge...
Frank :gruebel: |
Re: Funktion Parameter zuweisen (Array of Byte)
Die Daten schreibe ich nicht, ich lese sie nur.
Sie kommen von einer anderen Anwendung aus dem UnixUmfeld. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz