![]() |
strin nach array of byte
hallo
irgendwie bin ich grad unfähig nen strin in einen 'array of byte' zu kopieren... darum geht's: ich habe einen gespeocherten md5-hash als 'string' (länge 15) und der soll wieder in einen 'array[0..15] of byte'. eigentlich ist das ja ganz simpel (?!?) nur bekomme ich entweder ne Fehlermeldung 'inkomaptible typen' oder einen array mit "falschen Werten" ich glaub, das was ich hier hab ist einfach nur müll, deshalb post ich es auch net... kann mir einer mal schnell so ne scheife schreiben die meinen string in den array schiebt? wäre nett ... |
Re: strin nach array of byte
Delphi-Quellcode:
(nicht getestet)
var myString : string;
byteArray : array[0..15] of byte; begin CopyMemory(@byteArray[0], @myString[1], 15); end; sinds wirklich nur 15 Bytes oder 16 (da 0..15 ja 16 sein sollte) |
Re: strin nach array of byte
noch ne´variante :coder2:
Delphi-Quellcode:
ist leider nicht mit dynamischer größe wg. case im Record! :!:
type
TTest = record case boolean of true : (Text : array [0..125] of char); false: (Zahl : array [0..125] of byte); end; var OutStr : String; TEST : TTest; i : Integer; b : Byte; begin OutStr := 'Help'; for i:=0 to Length(OutStr)-1 do TEST.Text[i] := OutStr[i]; b := TEST.Zahl[0]; |
Re: strin nach array of byte
vielen Dank !!!
und ja, es sind 16 ;-) |
Re: strin nach array of byte
Ab Delphi2006, sprich: TurboDelphi kann man glaube ich sogar
Delphi-Quellcode:
benutzen, wobei c ein char ist ;)
for c in mystring do
|
Re: strin nach array of byte
Zitat:
|
Re: strin nach array of byte
müsste es eigentlich nicht auch irgendwie so gehen ... ? (natürlich je nachdem wie du die variablen deklariert hast)
und sollte dann eigentlich die schnellste version sein ;)
Delphi-Quellcode:
var myString : string[16]; tempR : record len : Byte; bytes : packed array[0..15] of byte; end absolute myString; begin myString := 'AB'; // tempR.bytes[0] = A // tempR.bytes[1] = B end; |
Re: strin nach array of byte
Zitat:
der record case nuzt den gleichen speicherbereich, kann diesen aber unterschiedlich interpretieren. wenn also das einfügen noch einbisschen optimaler ist, dann sollte das an CopyMemory ran reichen. Bin mir aber nicht sicher wie das geht. :gruebel: |
Re: strin nach array of byte
die record variante sollte etwa so gehen:
Delphi-Quellcode:
Grüße
type
data = record case boolean of true: (text: String[15]); false: (byteArray: Array[0..15] of Byte); end; ... procedure TForm1.Button1Click(Sender: TObject); var test: data; i:Byte; begin Memo1.Clear; test.text:='012345678901234'; for i:=low(test.byteArray)+1 to high(test.byteArray) do begin Memo1.Lines.Add(InttoHex(test.ByteArray[i],2)); end; end; Klaus |
Re: strin nach array of byte
Zitat:
Wenn Du also mal eine Menge Daten kopieren möchtest, dann solltest Du einfach nur Move im Hinterkopf behalten. Natürlich ist eine so mächtige Funktion nicht ganz ohne, sie prüft beim kopieren keine Speichergrenzen, gibst Du eine ungültige Startadresse oder Länge an, so werden die Bytes in Speicher geschrieben, der nicht dafür gedacht ist. Welchen Teil deiner Anwendung Du dann überschreibst und was das für Auswirkungen hat kann man dann nicht vorher sagen. Deswegen bei Move immer gut überlegen und nicht vergessen, der nutzbare Teil eines Strings beginnt immer bei 1. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:20 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