Pregunta

Estoy seguro de que esta es una pregunta fácil, pero no tengo una respuesta. Aquí está el senario y la pregunta.

Tengo una matriz que se almacenó usando un formato particular. El formato contiene un registro de encabezado con múltiples registros detallados a continuación. El encabezado del registro me dice qué TypeCode se usó para almacenar los datos, por ejemplo Int32.

Tengo una rutina que toma una matriz de bytes [] y convierte los datos de bytes a su formato correcto en C #. Esta rutina necesita la cantidad adecuada de bytes para que la conversión sea exitosa.

P. Entonces, ¿cómo puedo obtener la longitud de bytes del TypeCode dado para pasar a la función Convertir sin tener que codificar la longitud de cada tipo?

¿Fue útil?

Solución

Dado que TypeCode es solo una enumeración de un conjunto fijo de valores, puede codificar fácilmente un diccionario de ellos, por ejemplo

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

(Una solución equivalente sería usar una declaración de cambio / caso; realmente son equivalentes si solo incluye valores).

Algunos, como string y object serán variables, y otros dependerán de cómo codifique cosas como DateTime .

A menos que esto esté utilizando una conversión estándar, nada en el marco podrá darle las longitudes. Sé que la codificación dura generalmente está mal vista, pero en este caso solo está en un lugar y será la opción más simple.

Otros consejos

De acuerdo con Cómo crear Type desde TypeCode ... , no puedes (sin un interruptor exhaustivo). Por supuesto, la otra dirección (Type- > TypeCode) es trivial.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top