Heya Leute!
Habe vor kurzen den Auftrag bekommen ToByteArray Methoden zu schreiben welche alle IntTypen (Int8 - Int64, UInt8 - UInt64) durchkleistert. Aber auch Single und Double soll dran glauben.
Leider glaub ich nicht so ganz an die Dinger xD
public static Byte[] ToBigEndianBytes(Int16 integer)
{
Byte[] p_byte_array = new Byte[2];
p_byte_array[0] = (Byte)(integer >> 8);
p_byte_array[1] = (Byte)(integer & 0x00FF);
return p_byte_array;
}
Das wäre die erste Lösung für 'n Int16.
public static Byte[] ToBigEndianBytes(Single single)
{
Byte[] p_byte_array = new Byte[2];
p_byte_array[0] = (Byte)(single >> 8);
p_byte_array[1] = (Byte)(single & 0x00FF);
return p_byte_array;
}
Da ich voll klug bin, probier ich das natürlich genauso mit Single. Mich überraschen die Compilererrors jetzt erst einmal nicht. Wobei ich es schon ein wenig blöd finde.
Laut IEEE 754 gibts es ja folgende Faustformel bei nem Single:
32 Bit komplett | 1 Bit Vorzeichen | 8 bit Exponent | 23 Bit Mantisse
Finde ich jetzt garnicht mal so kompliziert. Genau das Schema würde ich nun gerne entweder auf Big oder LittleEndian Basis in 'n ByteArray zuweisen. Da ich aber mit den BitWise Operatoren nicht arbeiten darf weiss ich nicht wie ich das anstellen soll ^^
Reicht es nicht einfach, daß Du die normalen Methoden nimmst und danach prüfst, ob Du auf Little Endian bist und dann ein Array.Reverse() machst?
Reicht es nicht einfach, daß Du die normalen Methoden nimmst und danach prüfst, ob Du auf Little Endian bist und dann ein Array.Reverse() machst?
Nein leider nicht. Ich soll kein .Reverse() nutzen.
Außerdem bist du jetzt aber nicht auf das Bitwise Problem mit Single eingegangen oder?
Es gibt System.Net.IPAddress.HostToNetworkOrder
das alles kann.
Warum das Rad neu erfinden? Und wer verbietet Dir Reverse? Wenn es sich um eine Schulaufgabe mit Vorgaben handelt dann gib diese preis.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Es gibt
System.Net.IPAddress.HostToNetworkOrder
das alles kann.
Warum das Rad neu erfinden? Und wer verbietet Dir Reverse? Wenn es sich um eine Schulaufgabe mit Vorgaben handelt dann gib diese preis.
Auch Dir danke ich für den Tip.
Kann mir nun jemand die Sache zwecks SingleToByteArray etwas näher bringen. Gibt es nen Shortcut um sowas zu bewältigen?
gruß Charlie
Kennst du schon die BitConverter-Klasse und dessen GetBytes-Methode?
Und darauf kannst du dann die IPAddress.HostToNetworkOrder-Methode aufrufen.
Ha ja kannte ich 😄
Wollte das ganze aber mal per Hand machen. Methoden callen kann ja jeder ^^
Also ma ehrlich, was sollen solche Aussagen? Wir sind hier immer noch ein _professionelles _Forum. 🤔
Das Forum hilft Dir freiwillig bei einer schnellen Lösungssuche. Die wurde Dir nun gegeben.
Wenn Du es möglichst kompliziert oder in eigenem Code haben willst; warum suchst Du dann nicht erstmal das freie Web nach anderen Implementierungen ab oder versuchst das Prinzip dahinter zu verstehen, damit Du mehr lernst - oder Du sagst es wenigstens?
So hat das nun die Leute nur Zeit gekostet und es hat nichts gebracht. Sowas ist alles andere als fair.
Da es hier offensichtlich um keine ernst gemeinte Lösungssuche sondern eher ein "Themengeplänkel" geht, mache ich hier zu.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code