AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Single in Byte-Array konvertieren und umgekehrt

Single in Byte-Array konvertieren und umgekehrt

Ein Thema von idontwantaname · begonnen am 8. Okt 2008 · letzter Beitrag vom 8. Okt 2008
Antwort Antwort
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#1

Single in Byte-Array konvertieren und umgekehrt

  Alt 8. Okt 2008, 10:55
Hi!

Wie kann ich denn eine Variable vom Typ Single in ein Byte-Array konvertieren und auch wieder zurück?

Lg oli
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Single in Byte-Array konvertieren und umgekehrt

  Alt 8. Okt 2008, 10:59
Ein Single ist vier Byte lang. Also kannst du so vorgehen:
Delphi-Quellcode:
var s: Single; b: array[0..3] of Byte;
begin
  //hin
  b[0] := PCardinal(@s)^ and $FF;
  b[1] := (PCardinal(@s)^ shr 8) and $FF;
  b[2] := (PCardinal(@s)^ shr 16) and $FF;
  b[3] := (PCardinal(@s)^ shr 24) and $FF;
  //zurück
  s := PSingle(@b[0])^;
end;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Single in Byte-Array konvertieren und umgekehrt

  Alt 8. Okt 2008, 11:01
Ah, ich muss das über einen anderen 4-Byte langen Datentyp machen, der Rest war mir eh klar
Vielen Dank!
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Roachford
(Gast)

n/a Beiträge
 
#4

Re: Single in Byte-Array konvertieren und umgekehrt

  Alt 8. Okt 2008, 11:05
Delphi-Quellcode:
type
  TSingleArray = array[0..sizeof(single)-1] of byte;
  TSingleByteAlias = case byte of
    0: (org: single);
    1: (arr: TSingleArray);
  end;
Delphi-Quellcode:
procedure ConvertSingleToByteArray(const ASingle: single; out AArray: TSingleArray);
var
  lConvertHelper: TSingleByteAlias;
begin
  lConvertHelper.org := ASingle;
  AArray := lConvertHelper.arr;
end;

procedure ConvertByteArrayToSingle(const AArray: TSingleArray; out ASingle: single);
var
  lConvertHelper: TSingleByteAlias;
begin
  lConvertHelper.arr := AArray;
  ASingle := lConvertHelper.org;
end;
Nur getippt, nicht getestet...
  Mit Zitat antworten Zitat
Medium
Online

Registriert seit: 23. Jan 2008
3.482 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Single in Byte-Array konvertieren und umgekehrt

  Alt 8. Okt 2008, 14:46
Nicht ganz. Es ist ja ein record, und das sollte man schon dazu schreiben
Noch ein "packed" dazu um Problemen mit Alignment von vorne herein aus dem Wege zu gehen, und die Deklaration des Arrays geht kürzer (ist aber technisch identisch):
Delphi-Quellcode:
type
  TSingleArray = packed array[sizeof(single)] of byte;
  TSingleByteAlias = record
  case boolean of
    true: (org: single);
    false: (arr: TSingleArray);
  end;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Roachford
(Gast)

n/a Beiträge
 
#6

Re: Single in Byte-Array konvertieren und umgekehrt

  Alt 8. Okt 2008, 14:55
Zitat von Medium:
Nicht ganz. Es ist ja ein record, und das sollte man schon dazu schreiben
Stimmt, vergessen.
Zitat von Medium:
Noch ein "packed" dazu um Problemen mit Alignment von vorne herein aus dem Wege zu gehen, und die Deklaration des Arrays geht kürzer (ist aber technisch identisch):
... und tritt niemals ein. Von daher ist das packed vollkommen vernachlässigbar. Ausser natürlich, man will mit der Grösse seiner Quellcodedateien angeben, dann kann man auch mehr Kommentare einfügen.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Single in Byte-Array konvertieren und umgekehrt

  Alt 8. Okt 2008, 15:19
Hallo,

weitere Möglichkeiten wären ein direkter Typecast mit dem Zieldatentyp oder die Deklaration mittels absolute:

Delphi-Quellcode:
var
  A : array [0..3] of Byte = (0, 0, 40, 66);
  s : Single absolute A;
begin
  // Möglichkeit #1
  ShowMessage (FloatToStr(Single(a)));
  
  // Möglichkeit #2
  ShowMessage (FloatToStr(s));
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf