tipos programacion datos conversiones conversion c++ c timestamp

c++ - programacion - Cómo convertir un tipo de datos largo de 64 bits al tipo de datos de 16 bits



conversion de tipos de datos en programacion (4)

16 bits pueden o no ser suficientes, según lo que necesite la marca de tiempo. Para la mayoría de los propósitos, es demasiado pequeño o al menos inconveniente. Pero algunos ejemplos donde esto podría funcionar podrían ser: tiempos de espera, medir el tiempo de ida y vuelta para los paquetes, medir groseramente los intervalos de tiempo (lo que podría funcionar bien para mostrar la información del tiempo a los usuarios) y así sucesivamente.

Por otro lado, probablemente sea inútil reordenar paquetes. Si este es el caso, te sugiero que reemplaces la marca de tiempo con un contador de secuencia. Dependiendo de la cantidad típica de paquetes en la transmisión, es posible que incluso pueda reducir algunos bits y usarlos para otros fines, ya que los contadores de secuencia pueden manejar el ajuste más fácilmente.

Me gustaría saber cómo convertir el tipo de datos de 64 bit long a cualquiera de los tipos de datos de 16 bit . Esta función es necesaria en la aplicación Ethernet para incluir la marca de tiempo . Solo 2 Bytes ( 16 bits ) están disponibles para incluir la marca de tiempo . Pero estamos obteniendo 64 bit long como el valor de Sello de tiempo de Win API . Por lo tanto, es esencial una conversión del tipo de datos de 64 bits al tipo de datos de 16 bits.


Bueno, no puede incluir 64 bits de información en 16 bits de almacenamiento sin perder parte de la información.

Entonces depende de usted cómo cuantizar o truncar la marca de tiempo. Por ejemplo, supongamos que obtienes la marca de tiempo en precisión de nanosegundos, pero solo necesitas almacenarla con precisión de segundos. En ese caso, divide el número de 64 bits por 1000000000 y se quedan con los segundos. Entonces podría encajar en 16 bits o no (16 bits solo almacenaría hasta 65535 segundos).

Si no se ajusta, entonces tendrá la marca de tiempo envolviendo periódicamente. Lo cual, de nuevo, podría ser un problema en su caso o podría no ser un problema.

En cualquier caso, si necesita interconectar una biblioteca existente que requiera marcas de tiempo, averigüe qué necesita en esa marca de tiempo (marcaciones de reloj? Segundos? Años?). A continuación, averigüe qué devuelve la función de tiempos de Windows que está utilizando. Luego convierta la unidad de tiempo de Windows en la unidad de tiempo de la biblioteca-que-usa-usa.


Como dijeron los demás, el primer problema es decidir sobre la escala correcta. Debes equilibrar tu resolución con el rango máximo deseado. Una forma de pensar es decidir cuántos segundos por bit quieres. Con 1 segundo por bit, puede expresar valores desde 1 segundo hasta 65536 segundos o ~ 1000 minutos. 1 milisegundo por bit le permite pasar de 0.001 segundos a 65.5 segundos

Esta es una forma de hacer la conversión.

#define seconds_per_bit .0001 <--YOUR VALUE HERE. #define bits_per_second (1/seconds_per_bit); int16 timestamp() { Int64 counts_per_second,counts; QueryPerformanceFrequency(&counts_per_sec); QueryPerformanceCounter(&counts); return (UInt16)(counts * bits_per_second / counts_per_second); }


Depende completamente de para qué usa la marca de tiempo. Mencionas ethernet, así que un uso obvio que podría imaginar es para pedir paquetes. Y en ese caso, todo lo que realmente necesitas es un contador. En lugar de su indicación de fecha y hora que dice "este paquete fue enviado el 14 de mayo a las 14:35 p.m.", simplemente puede decir "este es el paquete 4023".

Si lo necesita para registrar el tiempo real del reloj, solo tiene que elegir qué partes del mismo son relevantes. 16 bits te dan 65536 valores para jugar. ¿Quieres que esos representen segundos? Entonces sus marcas de tiempo se envolverán cada 18 horas.

O pueden ser minutos. Entonces pasarán 45 días antes de que se envuelvan. O días o microsegundos, todo depende de lo que necesite.

Pero la única manera de convertir un valor de 64 bits en uno de 16 bits es eliminar 48 bits de datos. Tu eliges cuales