1
내가 데이터 구조 다음 한 이진 데이터 파일의 신기원 시간을 찾을 필요가
에 포장 BIT 구조에서 EPOCH 시간 값을 얻기 위해 (이것은 12 바이트 구조) 필드 -1과 필드 -2 나는 쉽게 빼낼 수 있으므로 문제가 없습니다. 다음과 같이 바이트 단위 -5,6,7,8- 3 포장 4 되었기 때문에는 C
I은 에포크 시간 (길이)의 시간 값을 필요
- 바이트 5~8 (32 비트 워드) 0에서 31까지의 시간 값 비트를 압축합니다 (바이트 5는 0에서 7 비트, 바이트 6은 8에서 15, 바이트 7은 16에서 23, 바이트 8은 24에서 31).
다음 시간 값의 나머지 10 비트 바이트 3 바이트 4에 포장되어
- 바이트 3 2 비트 갖는다 : 32, 33, 바이트 4는 나머지 비트들을 갖는다 : 34-41
따라서 시간 값의 총 비트는 위와 같이 42 비트입니다.
이 42 비트에서 나오는 에포크 값을 계산해야합니다. 어떻게해야합니까? 코드에서 다음
typedef struct P_HEADER {
unsigned int tmuNumber : 22; //sorry for the typo.
unsigned int time1 : 10; // Bits 6,7 from Byte-3 + 8 bits from Byte-4
unsigned int time2 : 32; // 32 bits: Bytes 5,6,7,8
unsigned int traceKey : 32;
} __attribute__((__packed__)) P_HEADER;
:
P_HEADER *header1;
//get input string in hexa,etc..etc..
//parse the input with the header as :
header1 = (P_HEADER *)inputBuf;
// then print the header1->time1, header1->time2 ....
long ttime = header1->time1|header1->time2;
이 값을 얻을 수있는 방법이 있나요 그것은 나에게 올바른 가치를 제공
이 같은 짓을했지만 확실하지? 당신이 그것을 descibe로
22 비트가 아닌 21 비트는 왜? 처음 두 비트 필드에 31 비트가있을 때 포장 된 것은 무엇입니까? 나머지 두 32 비트 필드가 이상하게 정렬되어 있습니까? –
로컬'time_t '은 32 비트 또는 64 비트 수량입니까? 표시된 시간이 1970-01-01 00 : 00 : 00 + 00 : 00 일 때 42 비트 시간 값에 포함되는 값은 무엇입니까? 2012-03-29 07 : 33 : 55-08 : 00에 포함되는 가치는 무엇입니까? Unix 시스템의 경우 대답은 각각 0과 1333031635입니다. –
우선, tmuNumber가 22 비트 (8 + 8 + 6)라고 생각합니다. 두 번째로, 원하는 ttime은 time1 뒤에 ttime2 비트가 올 것입니다. 그렇지 않습니까? 그럼 당신은 다음과 같은 일을해야한다고 생각합니다 :'uint64_t ttime = (((uint64_t) header1-> time1) << 32) + ((uint64_t) header1-> time2); ' – rbelli