Как извлечь поле «3 бита» из указанной ниже формат строки
Привет,
Скажем у меня есть строка, как «888820c8». Как я могу получить эти 3 бита в int на языке программирования c?
UPDATE 1 -
Это то, что я был в состоянии сделать
static const char* getlast(const char *pkthdr)
{
const char *current;
const char *found = NULL;
const char *target = "8888";
int index = 0;
char pcp = 0;
size_t target_length = strlen(target);
current = pkthdr + strlen(pkthdr) - target_length;
while (current >= pkthdr) {
if ((found = strstr(current, target))) {
printf("found!\n");
break;
}
current -= 1;
}
if(found)
{
index = found - pkthdr;
index += 4; /*go to last of 8188*/
}
printf("index %d\n", index);
/* Now how to get the next 3 bits*/
printf("pkthdr %c\n", pkthdr[index]);
pcp = pkthdr[index] & 0x7;
printf("%c\n", pcp);
return pcp;
}
Очевидно, я знаю, последняя часть моей программы не так и любые входы были бы полезны. благодаря!
Update 2:
Благодаря Pratik для указателя. Этот код выглядит хорошо сейчас?
static char getlast(const char *pkthdr)
{
const char *current;
const char *found = NULL;
const char *tpid = "8188";
int index = 0;
char *pcp_byte = 0;
char pcp = 0;
int pcp2 = 0;
char byte[2] = {0};
char *p;
unsigned int uv =0 ;
size_t target_length = strlen(tpid);
current = pkthdr + strlen(pkthdr) - target_length;
//printf("current %d\n", current);
while (current >= pkthdr) {
if ((found = strstr(current, tpid))) {
printf("found!\n");
break;
}
current -= 1;
}
found = found + 4;
strncpy(byte,found,2);
byte[2] = '\0';
uv =strtoul(byte,&p,16);
uv = uv & 0xE0;
char i = uv >> 5;
printf("%d i",i);
return i;
}
Это не «строковый формат». Но чтобы решить вашу проблему, написать программу было бы хорошей идеей. Не стесняйтесь задавать ** конкретный ** вопрос, если это проветривается. Не забудьте предоставить [mcve] и следуйте советам в [ask]. – Olaf
И «маскировка» и «бит-сдвиг» могут быть хорошими условиями для начала исследования. –
Если сначала в текстовом формате вы можете применить 'strtol', чтобы преобразовать его во внутреннее двоичное представление, а затем применить маску и сдвиг, или сдвиг и маску. Но что вы пробовали? Мы не хотели бы публиковать решение pat, в котором вы, похоже, не начали. –