#include <stdio.h>
#include <stdint.h>
struct __attribute__((__packed__)) sf_header
{
uint64_t lower: 32;
uint64_t higher: 32;
};
int main()
{
struct sf_header h;
// part 1;
h.lower = 15;
h.higher = 1;
printf("lower part: %d\n", h.lower);
printf("higher part: %d\n", h.higher);
//part 2: how to printf the whole 64-bits (a row)
unsigned long int lower = h.lower;
unsigned long int higher = h.higher;
higher = higher << 32;
printf("lower: %ld\n", lower);
printf("higher: %ld\n", higher);
unsigned long int final = lower | higher;
printf("Final: %ld\n", final);
return 0;
}
Он работает на 64-битных, а длинный int - 8 байтов, размер строки.Как использовать бит-поле для получения целых битов строки?
Во-первых, я назначаю два значения в младшие 32 бит и выше 32 бит.
Что делать, если я хочу получить 64 бита и использовать его?
Нужно ли делать часть 2 или есть простой способ битового поля?
С «союзом»? –
По какой-либо причине вы знаете о 'uint64_t' и используете его частично, но затем используете' unsigned long', у которого не гарантируется наличие 64 бит? И почему бы не печатать непосредственно типы 'uint64_t'? Вы знаете о 'inttypes.h'? – Olaf
«Что делать, если я хочу получить 64 бита и использовать его?» Что вы хотите достичь? – SGM1