Ik ben bezig met data verwerken. Deze data wordt aangegeven in een unsigned char array (als in unsigned char* data).
In dit geval staat er een 40 bits getal in deze array. Op plaats 4 t/m 8. Hoe sla ik deze op in een int64_t
Als ik een unsigned char met 8 naar links shift, wordt het dan in een temp variable opgeslagen waar het in past? Als in een 16 bits getal (of groter) ? Of wordt het bewaard in een dezelfde soort variable als waar de shift op gebaseerd is. unsigned char met 8 shiften wordt dan (altijd) 0.
Hiermee omzeil ik het probleem. Maar wat is het gedrag van het eerste stukje code en kan ik het forceren om in een groter getal te zetten? Typecasten oid?
In dit geval staat er een 40 bits getal in deze array. Op plaats 4 t/m 8. Hoe sla ik deze op in een int64_t
C++:
1
2
3
4
5
| m_UTCTime = data[8]; m_UTCTime += data[7] << 8; m_UTCTime += data[6] << 16; m_UTCTime += data[5] << 24; m_UTCTime += data[4] << 32 |
Als ik een unsigned char met 8 naar links shift, wordt het dan in een temp variable opgeslagen waar het in past? Als in een 16 bits getal (of groter) ? Of wordt het bewaard in een dezelfde soort variable als waar de shift op gebaseerd is. unsigned char met 8 shiften wordt dan (altijd) 0.
C++:
1
2
3
4
5
6
7
8
9
10
11
| int64_t tempdata; m_UTCTime = data[8]; tempdata = data[7]; m_UTCTime += data[7] << 8; tempdata = data[6]; m_UTCTime += tempdata << 16; tempdata = data[5]; m_UTCTime += tempdata << 24; tempdata = data[4]; m_UTCTime += tempdata << 32; |
Hiermee omzeil ik het probleem. Maar wat is het gedrag van het eerste stukje code en kan ik het forceren om in een groter getal te zetten? Typecasten oid?
[This space is for rent]