Laden...

Integer in ByteArry ablegen und wieder einlesen

Erstellt von kuppi vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.285 Views
K
kuppi Themenstarter:in
44 Beiträge seit 2006
vor 16 Jahren
Integer in ByteArry ablegen und wieder einlesen

Hallo c# Spezialisten,

ich will per UDP Daten verschicken, und der UDPClient erwartet bei .Send ein ByteArray.
Das Struct das die Daten enthält sieht folgendermaßen aus:


[StructLayout(LayoutKind.Explicit)]
	public struct UDPdata
	{
	[FieldOffset(0)] public byte devTyp;
	[FieldOffset(1)] public byte devID;
	[FieldOffset(2)] public byte paramID;
	[FieldOffset(3)] public byte rw;
	[FieldOffset(4)] public int wert;
	}

die ersten 4 bytes kann ich natürlich einfach zuweisen z.b. arrayvar[0] = data.devTyp u.s.w.
wie bekomme ich aber den integer in das Array?
und wenn die Gegenseite geantwortet hat (Receive) wie bekomme ich die letzten 4 Bytes in den Integer?

Schon mal vielen Dank.

kuppi

2.187 Beiträge seit 2005
vor 16 Jahren

Nur mal ins blaue hinnein geraten:


System.Convert.ToByte(int value)

D
500 Beiträge seit 2007
vor 16 Jahren

Hallo JuyJuka!

Dein Raten ist glaube nicht was er meint.


System.Convert.ToByte(int value) 

Liefert lediglich einen Byte-Wert, der von einem Integer gecastet wurde.
Schaut man in den Quellcode mittels des Reflectors siehst Du:


public static byte ToByte(int value)
{
    if ((value < 0) || (value > 0xff))
    {
        throw new OverflowException(Environment.GetResourceString("Overflow_Byte"));
    }
    return (byte) value;
}

Gruß, DaMoe

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo kuppi,

BitConverter-Klasse

herbivore

D
500 Beiträge seit 2007
vor 16 Jahren

@Kuppi:
Du musst Dir folgendes überlegen. Dein Integer ist 32Bit lang. Also entweder du machst das von Hand indem Du den &- und >>-Verschiebeoperator verwendest:

Beispiel

  • 65535 enspricht binär einer Zahl mit 16 einsen.
    Um das nun in ein ByteArray zu speicher würde ich so vorgehen:

int baseInt = 65535;
//So bekomme ich die ersten 8 bit
byte firstEightBit = baseInt & 255;
//Verschiebe die zweiten 8 bit auf den Anfang und schneide mit dem &-Operator alles nicht interessante ab
byte secondEightBit = (baseInt>> 8) & 255;
//usw.

Oder Du verwendest als Hilfsmittel den ByteConverter.

Gruß, DaMoe

K
kuppi Themenstarter:in
44 Beiträge seit 2006
vor 16 Jahren

@all,

vielen Dank für die schnellen Antworten.
Das mit der BitConverter Klasse scheint für mich das richtige zu sein.
Das funktioniert ja auch in beiden Richtungen.

Gruß kuppi