Hallo
Ich will gerne ein int nach in ein byte[] Array übertragen.
Leider stehe ich jetzt voll auf der Leitung X( ... 🤔
Ein int ist ja 32 bit ich will dann das im byte[] Array der int dann zu finden ist.
Also als Beispsiel wenn
int x= 5;
dann soll im byte[] Array
byte[] data = new byte[3];
data[0] = 0
data[1] = 0
data[2] = 0
data[3] = 5
stehen ... habe irgndwas was kleiner ist als 16 genommen um mir eine
Umrechnung zu ersparen ...
und ich will natürlich auch den umgekehrten weg angehen ...
Wie macht man sowas denn in C# ?
und Wie kann ich auf die einzelnen Byteadressen zugreifen ?
mfg martin
Hi,
int x = 5;
byte[] data = BitConverter.GetBytes(x);
Gruß
DCoder
Hi
Danke ...
Aber bin immer noch auf wackligem Boden.
was mach ich denn wenn ich z.b
byte[] data = new byte[32];
in den ersten vier will ich z.b "5" in den nächsten vier "6" will ich sechs schreiben.
🤔
wie kann ich mit einem byte Array richtig handieren ? Das ist mir noch nicht ganz klar....
mfg martin
BitConverter.GetBytes liefert dir ein Array. Daher kannst du auch dessen Mehtoden benutzen: BitConverter.GetBytes( x ).CopyTo( destination, startindex ).
Was willst du denn genau damit machen?
Im Prinzip hast du ja einfach ein byte array und kannst damit ganz "normal" arbeiten. Wenn du jetzt 2 int werte nacheinander in einem byte array stehen haben willst, könntest du dir manuell das byte array zusammen bauen (mit Hilfe des BitConverters).
Aber beschreib am besten mal lieber was du eigentlich vor hast, dann kommt vielleicht die beste lösung viel schneller ans Licht 😉
Hi
Nunja ich will ein int Array sozusagen in ein ByteArray kopieren. (ohne verluste)
Das von Borg sieht gut dafür aus ... 😉
Hmm hab mich wohl zu früh gefreut oder bin verwirrt weil ein void zurück gegeben wird ? 🤔
mfg martin
Dann musst du wohl ein großes byte array anlegen (bei int, einfach die anzahl der element * 4) und dann für jedes int die bytes vom BitConverter in das große byte Array packen.
Die Methode CopyTo liegt in der Klasse Array, und da dir BitConverter.GetBytes() ja ein Array zurückliefert, kannst du dann natürlich auch direkt CopyTo aufrufen. mit dem Index gibst du jetzt an wo in dem großen array der neue satz an daten reinkommen soll -- am besten einen zähler mitlaufen lassen, der die anzahö der bisher geschriebenen bytes zurückgibt. dieser zähler ist dann dein index.
Hi
Hmm Danke erstmal
Ich spiel damit mal herum.
Und wie kann ich einen Stream ? in ein byte Array kopieren ?
Gibt es eigentlich auch die Möglichkeit das Int Array als ByteArray darzu stellen ?
Ohne das ich das kopieren muss ?
mfg Martin.
Hallo martin_zi,
Und wie kann ich einen Stream ? in ein byte Array kopieren ?
einfach mit Stream.Read.
Gibt es eigentlich auch die Möglichkeit das Int Array als ByteArray darzu stellen ? Ohne das ich das kopieren muss ?
Nein!
herbivore
Man kann das ganze auch ohne BitConverter machen. Gefällt mir persönlich besser.
int num = 10;
byte[] buffer = new byte[ num * sizeof( int ) ]
int[] vals = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int pos = 0;
for( int i = 0; i < num; i++ )
{
buffer[ pos++ ] = (byte)((byte)(vals[0] >> 0) & (byte)0xFF);
buffer[ pos++ ] = (byte)((byte)(vals[0] >> 8) & (byte)0xFF);
buffer[ pos++ ] = (byte)((byte)(vals[0] >> 16) & (byte)0xFF);
buffer[ pos++ ] = (byte)((byte)(vals[0] >> 24) & (byte)0xFF);
}
Hallo
D.h z.b so
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, stream.Length);
Wobei stream der Stream ist vorher initalisiert und irgendwo her.
Ok ich hab das jetzt in der msdn gefunden richtig!
Ein Bytearray. Nach dem Beenden dieser Methode enthält der Puffer das angegebene Bytearray mit den Werten zwischen offset und (offset + count - 1), die durch aus der aktuellen Quelle gelesene Bytes ersetzt wurden.
Aber jetzt verstehe ich wohl etwas Grundlegendes nicht.
Wie kann denn in dem Array bytes was sein ?
Ich meine müsste ich die Methode nicht mit "call by reference" übergeben ?
Das heißt doch ich müsste das Schlüsselwort ref nutzen aber die Methode verlangt das
ja gar nicht ? 🤔 🤔 🤔
Daher habe die Methode übersehen da kein ref oder out steht.
Offenscihtlich ist das nicht so ...
ich habe mir gerade das durchgelesen
C# und Übergabemechanismen: call by value vs. call by reference (ref/out)
aber offensichtlich nicht ganz verstanden X(
mfg Martin
@EvilTK
Deine Lösung find ich persönlich auch besser -- aber in deiner schleife müsste statt vals[0] glaub ich vals_ stehen, oder?
Gruß
DCoder
@DCoder stimmt, fehler meinerseits.
@martini_zi Arrays sind Referenz typen und werden somit immer call-by-reference übergeben.