AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Funktion Parameter zuweisen (Array of Byte)
Thema durchsuchen
Ansicht
Themen-Optionen

Funktion Parameter zuweisen (Array of Byte)

Ein Thema von Klaus01 · begonnen am 14. Sep 2006 · letzter Beitrag vom 18. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#1

Funktion Parameter zuweisen (Array of Byte)

  Alt 14. Sep 2006, 14:37
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:
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;
Nur mosert Delphi da.
Wenn ich die Wert einzeln übergebe klappt das.
Ist mir aber zu Zeitintensiv.

Weiß jemand aus dem Forum Rat?

Grüße und Danke
Klaus
Klaus
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 14. Sep 2006, 14:46
mach hier mal einen typ draus:
Delphi-Quellcode:
// RLData: Array of Byte
type
  meinRLData = Array of Byte;

function getCellID(RLData: meinRLData ):Word;
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 14. Sep 2006, 14:47
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 Delphi-Referenz durchsuchenMove zu verwenden. Damit kannst Du die Werte des Arrays einfach als Block kopieren.

@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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 14. Sep 2006, 14:50
Move(RLData[0], RLInfo.rawSet[0], sizeof(RLInfo.rawSet));
Andreas
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 14. Sep 2006, 14:59
@xaromz und shmia
danke klappt gut damit.

@generic
Dein Vorschlag bringt auch eine TypInkompatibilität.

@xaromz
Zitat:
Die erste Lösung hast Du schon benannt. Sonderlich langsam ist das bei acht Bytes eigentlich nicht.
Nun ich habe eine Datei mit ca.100000 Datensätzen und pro Datensatz wird die Funktion
4 mal aufgerufen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 15. Sep 2006, 08:33
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!
(rawSet : Array [0..7] of Byte); ist ungleich
  meinRLData = Array of Byte; du kannst natürlich daraus machen:
  meinRLData = Array [0..7] of Byte; dann funktioniert zumindest deine zuweisung hier:
  RLInfo.rawSet:=RLData;
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 15. Sep 2006, 08:39
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 15. Sep 2006, 08:51
@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:
  
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;
Wie man hier sieht ist RLInformation ein Array [0..7] of Byte.
RLInformation ist wieder ein eigener Datensatz:

Delphi-Quellcode:
  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;
Ich arbeite hier mit Records weil ich dann einfacher auf die einzelnen Datenfelder zugreifen kann
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 15. Sep 2006, 09:16
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
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Funktion Parameter zuweisen (Array of Byte)

  Alt 15. Sep 2006, 13:43
Die Daten schreibe ich nicht, ich lese sie nur.
Sie kommen von einer anderen Anwendung aus dem UnixUmfeld.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz