AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pointer auf Array ?

Ein Thema von eric_draven · begonnen am 10. Okt 2011 · letzter Beitrag vom 10. Okt 2011
Antwort Antwort
eric_draven

Registriert seit: 26. Jul 2007
15 Beiträge
 
#1

AW: Pointer auf Array ?

  Alt 10. Okt 2011, 13:33
Danke !
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#2

AW: Pointer auf Array ?

  Alt 10. Okt 2011, 13:45
Vorschlag auf die Schnelle (s muss BTW ein AnsiString sein):
Delphi-Quellcode:
type
  TStatus = Array[1..16] of Byte;

Var s, s2 : AnsiString;
    i, j : Integer;

    Status : TStatus;
    PStatus : ^TStatus;

    PLength : PByte;
    CurrentBit: Byte;
begin
  s := #$00#$00#$00#$00#$08#$04#$02#$01#$00#$00#$00#$00#$08#$04#$02#$01;

  PLength := @s[7];
  ShowMessage(IntToStr(PLength^)); //Ergebnis = 2, stimmt

  PStatus := @s[1];
  Status := pStatus^;

  (*Debugausgabe*)
  s2 := '';
  For i := Low(Status) to High(Status) do
  Begin
    for j := 7 downto 0 do
      begin
        CurrentBit := 1 shl j;
        if (Status[i] and CurrentBit) = CurrentBit then
          s2 := s2 + '1'
        else
          s2 := s2 + '0';
      end;
    if i < High(Status) then
      s2 := s2 + #32;
  End;
  ShowMessage(s2);
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
eric_draven

Registriert seit: 26. Jul 2007
15 Beiträge
 
#3

AW: Pointer auf Array ?

  Alt 10. Okt 2011, 16:07
Nochmals Danke
Hehe, hatte mir fast die gleiche Lösung überlegt:
Code:
 
  For i:=Low(Status) to High(Status) do Begin
    For i2 := 7 downto 0 do
     If (Status[i] AND (1 SHL i2)) <> 0  then s2 := s2 + '1'
     Else s2 := s2 + '0';
    s2 := s2 + #32;
  End;
Ich benutze noch Delphi 2005, bei XE(2) ist ein Zeichen eines Strings dann 2 Byte breit (Unicode), deshalb meinst Du AnsiString benutzen oder ?

Noch eine Frage zum ByteBool, wenn ich mehrere Boolsche Variablen in meinem Programm deklariere, kann Delphi dann durch Compilermagic z.B. für 3 Werte trotzdem nur 1 Byte benutzen oder wird auch dann immer ein Byte Speicher verbraucht ? Heutzutage ist es wohl nicht mehr so wichtig*, auf jedes Byte zu achten aber interessieren würde es mich schon.

*Ich programmiere auch AVRs, da sieht das etwas anders aus
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Pointer auf Array ?

  Alt 10. Okt 2011, 16:09
Du kannst natürlich mehrere Booleans als Bitfelder speichern
Markus Kinzler
  Mit Zitat antworten Zitat
eric_draven

Registriert seit: 26. Jul 2007
15 Beiträge
 
#5

AW: Pointer auf Array ?

  Alt 10. Okt 2011, 16:17
Das ist schon klar, das mache ich ja auch, wenn ich bei den 16Byte auf die 128 einzelnen Bits zugreife.
Die Frage ist:
Wenn ich eine Boolsche Variable deklariere braucht die ein Byte (ByteBool).
Wenn ich nun zwei Boolsche Variablen deklariere, brauchen die nun zwei Byte oder ist der Compiler so klever die in ein Byte zu packen ?
Alleine der Pointer auf den Bool dürfte aber unter 32bit 4Byte brauchen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.875 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Pointer auf Array ?

  Alt 10. Okt 2011, 16:22
Eine Booleanvariable belegt ein Byte, da dies die kleinste (Speicher-)Einheit ist
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:11 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