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
Nur mal ins blaue hinnein geraten:
System.Convert.ToByte(int value)
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
Hallo kuppi,
BitConverter-Klasse
herbivore
@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
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
@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