Ну, если вы хотите битную манипуляции, независимо от того, что здесь не идет:
#include <stdio.h>
#include <arpa/inet.h>
int main(void) {
char arr[8] = "9997111";
int msg = 0;
msg = ((ntohl(*(uint32_t *) arr)) & 0xff) - 48;
printf("%d\n", msg);
return 0;
}
Выход:
7
Только помните одну вещь ... это не соответствует строгим ступенчатости правила. Но вы можете использовать материал memcpy() для его решения.
Редактировать # 1 (разборе все это, предоставляя соблюдение строгих правил наложения спектров, и сделать вы видите, что это не имеет никакого смысла):
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <arpa/inet.h>
int main(void) {
char arr[8] = "9997111";
uint32_t a[2];
unsigned int id = 0, msg = 0, val = 0;
memcpy(a, arr, 4);
memcpy(&a[1], arr + 4, 4);
a[0] = ntohl(a[0]);
a[1] = ntohl(a[1]);
id = ((((a[0] & 0xff000000) >> 24) - 48) * 100) + ((((a[0] & 0xff0000) >> 16)- 48) * 10) + (((a[0] & 0xff00) >> 8)- 48);
msg = (a[0] & 0xff) - 48;
val = ((((a[1] & 0xff000000) >> 24) - 48) * 100) + ((((a[1] & 0xff0000) >> 16)- 48) * 10) + (((a[1] & 0xff00) >> 8)- 48);
printf("%d\n", id);
printf("%d\n", msg);
printf("%d\n", val);
return 0;
}
Выход:
999
7
111
Зачем вам нужны манипуляции с битами для извлечения таких данных из массива char [8]? Это требование для так я причина? – pah
Да. Использовать & оператор для выполнения побитового AND –
@threadp Нет, я думал, что могу просто извлечь это конкретное значение, но решил, что смогу дать ему попробовать использовать манипуляции с битами. – user2899246