У меня есть эта проблема. У меня есть полезная нагрузка, которая динамически меняет ее длину. Если я не отрежу эту полезную нагрузку, у меня появятся также сведения, которые являются мусором для меня. Поэтому я хочу сократить полезную нагрузку в базе моей длины полезной нагрузки.Сдвиг и маскировка в C
У меня есть эта часть кода:
uint64_t data_tmp = HTONLL((uint64_t) zp->data);
uint8_t len = zp->length;
uint64_t mask = 0xFFFF >> (64 - len);
data_tmp = data_tmp & mask;
printf("DATA_TMP = %llu\n", data_tmp);
zp-> данные после того, как написано в t-> поле полезной нагрузки. Так что это моя полезная нагрузка. Это 64-битное поле.
Я хочу временно взять эту полезную нагрузку. Рассчитайте мою длину полезной нагрузки, то есть поле длины zp->, типа uint8. После того, как я создам маску, которая сдвигает 64 байта - payload_length, таким образом, что я могу применить ее к временной полезной нагрузке и получить поле с только данными, которые я хочу, и всеми нулями.
Как я могу это сделать?
Например. Если payload_length равно 01 и полезная нагрузка 00 + .............. (мусор) Я хочу получить полезную нагрузку, такую как 00000000 на 64 байт.
Если моя полезная нагрузка равна 13 и полезная нагрузка 1284732089322309 .... Я хочу получить только байты тирхина.
Извините, если это трудно сказать ...
Мне кажется, что вам нужны бинарные, а не логические и. try 'data_tmp = data_tmp & mask' – Kyborek
как объявляется' zp-> data'? – user2116939
Является ли ваша полезная нагрузка 64 бита или 64 байта? –