Pregunta

Tengo un problema aquí que es probablemente algo que sólo estoy con vistas, pero no puedo entender por qué está sucediendo ...

El problema que estoy teniendo es que estoy usando el convertidor de poco para darme un Int16 de una matriz de 2 bytes, pero por alguna razón cada vez que hago esto - Me da la cantidad que debería obtener, con 0xFFFF se añade al principio del número.

Ejemplo ...

byte[] ourArray = { 0x88, 0xA3, 0x67, 0x3D };
Int16 CreationDate = BitConverter.ToInt16(new byte[] {ourArray[2], ourArray[3]} , 0);
Int16 CreationTime = BitConverter.ToInt16(new byte[] {ourArray[0], ourArray[1]}, 0);

que volverá con "CreationDate" ser 0x3d67 (correcto), pero CreationTime siendo 0xffffa388.

¿A alguien le sucede a saber por qué esto está ocurriendo, y una manera de corregir esto?

¿Fue útil?

Solución

0xA388 es un negativo Int16, así convertido a Int32 dará una firmar extendido int negativo con valor similar. 0xFFFF que se ve es la extensión de signo (relleno con '1' bits). Un mejor uso y UInt16 UInt32.

Otros consejos

0xffffa388 no es un Int16. ¿Estás seguro de que no estás lanzando a algún tipo de 32 bits?

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