Frage

Ich bin sicher, dass dies eine einfache Frage, aber ich habe keine Antwort. Hier ist die senario und die Frage.

Ich habe ein Array, die gespeichert wurde in einem bestimmten Format. Das Format enthält einen Kopfsatz mit muntiple Detail Records danach. Der Header des Datensatzes sagt mir, was Typecode verwendet wurde, um die Daten zu speichern, zum Beispiel Int32.

Ich habe eine Routine, die einen byte [] Array nimmt und wandelt die Byte-Daten zurück, um es in C # richtiges Format ist. Diese Routine muss die richtige Anzahl von Bytes die Umwandlung erfolgreich zu machen.

Q. Also, wie kann ich die Länge von Bytes aus dem angegebenen Typecode für ohne zu konvertieren Funktion übergeben, die Länge für jede Art codieren mit?

War es hilfreich?

Lösung

Da TypeCode ist nur eine Aufzählung von einem festen Satz von Werten, könnte man leicht fest einprogrammieren ein Wörterbuch von ihnen, z.

private static readonly Dictionary<TypeCode,int> TypeCodeLength =
    new Dictionary<TypeCode,int> {
    { TypeCode.Int32, 4 },
    { TypeCode.Int64, 8 },
    { TypeCode.Char, 2 },
    // etc
}

(Eine äquivalente Lösung wäre, einen Switch / Case-Anweisung zu verwenden, -. Sie wirklich gleichwertig sind, wenn man nur mit Werten ist)

Einige, wie string und object wird jedoch variabel sein -. Und andere werden davon abhängen, wie Sie Dinge wie DateTime sind codiert,

Es sei denn, dies ist eine Standard-Konvertierung mit nichts mehr im Rahmen wird in der Lage sein, um die Längen zu geben. Ich weiß, Hartcodierung ist in der Regel verpönt, aber in diesem Fall ist es nur an einem Ort und wird die einfachste Option.

Andere Tipps

Nach Wie Art zu schaffen, von Typecode ... Sie können nicht (ohne Anspruch auf Vollständigkeit Schalter). Natürlich ist die andere Richtung (Typ-> Typecode) ist trivial.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top