![]() |
Single in Byte-Array konvertieren und umgekehrt
Hi!
Wie kann ich denn eine Variable vom Typ Single in ein Byte-Array konvertieren und auch wieder zurück? Lg oli |
Re: Single in Byte-Array konvertieren und umgekehrt
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; |
Re: Single in Byte-Array konvertieren und umgekehrt
Ah, ich muss das über einen anderen 4-Byte langen Datentyp machen, der Rest war mir eh klar ;)
Vielen Dank! |
Re: Single in Byte-Array konvertieren und umgekehrt
Delphi-Quellcode:
type
TSingleArray = array[0..sizeof(single)-1] of byte; TSingleByteAlias = case byte of 0: (org: single); 1: (arr: TSingleArray); end;
Delphi-Quellcode:
Nur getippt, nicht getestet...
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; |
Re: Single in Byte-Array konvertieren und umgekehrt
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; |
Re: Single in Byte-Array konvertieren und umgekehrt
Zitat:
Zitat:
|
Re: Single in Byte-Array konvertieren und umgekehrt
Hallo,
weitere Möglichkeiten wären ein direkter Typecast mit dem Zieldatentyp oder die Deklaration mittels absolute:
Delphi-Quellcode:
Gruß Hawkeye
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 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