Como montar una estructura en un Int64?
-
28-09-2019 - |
Pregunta
necesito para ajustarse a la siguiente estructura en Int64.
day 9 bit (0 to 372)
year 8 bit (2266-2010 = 256 y)
seconds 17 bit (24*60*60=86400 s)
hostname 12 bit (2^12=4096)
random 18 bit (2^18=262144)
¿Cómo hago tal forma una estructura en un Int64? Todos los artículos son Numberic, y del tamaño de bits especificado
Solución
Just bit a bit o los componentes juntos con los cambios apropiados.
int64 combined = random | (hostname << 18) | (seconds << (18+12)) ... etc.
sacar las cosas y desplazando y de todas ellas.
random = combined & 0x3FFFF
hostname = (combined >> 18) & 0xFFF;
etc.
Otros consejos
Normalmente se había declarar una estructura con una Int64 campo, y múltiples propiedades que el acceso sólo los bits correspondientes de ese campo.
Así como:
struct MyStruct
{
int64 _data
public short Day
{
get { return (short)(_data >> 57); }
}
}
etiquetada este C ++ y C #, muy diferentes opciones para los dos.
En C ++ se puede utilizar campos de bits :
// from MSDN
struct Date
{
unsigned nWeekDay : 3; // 0..7 (3 bits)
unsigned nMonthDay : 6; // 0..31 (6 bits)
unsigned nMonth : 5; // 0..12 (5 bits)
unsigned nYear : 8; // 0..100 (8 bits)
};
En C #, tendrá que desplazamiento de bit a sí mismo, al igual que en las otras respuestas.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow