Получить целочисленное значение из 4 последовательных байтов в строке - PullRequest
0 голосов
/ 24 мая 2019

Получив массив символов, я должен сохранить в переменной типа int число, представленное 4 последовательными байтами в этом массиве символов.Я знаю позицию, где первый байт находится в этом массиве.Что мне делать?

Редактировать: Решение № 1:

 int number , offset;
 char *data;
 memcpy(&number, &data[offset], 4);

Решение № 2:

 int number , offset;
 char *data;
 number = *(int*)(data + offset);
 // offset: where the first of the four bytes is situated

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Это то, что я пытался сделать. Это было правильно, но у меня было неправильное смещение, и я думал, что метод был неправильным. Используя memcpy, я получил тот же результат, поэтому я знал, в чем проблема.

 int number , offset;
 char *data;
 number = *(int*)(data + offset);
 // offset: where the first of the four bytes is situated
0 голосов
/ 24 мая 2019

Не проверено

int convert_to_int(chat *buff, int ascii, int str, int endianess)
{
    union
    {
        int i;
        unsigned char uc[sizeof(int)];
    }ui = {.i = 0};
    int mult = 1;

    if(str)
    {
        for(int digit = 0; digit < sizeof(ui.i); digit++)
        {
            mult *= 10;
        }
    }

    for(size_t index = 0; index < sizeof(int); index++)
    {
        size_t pos = endianess ? index : sizeof(ui.i) - 1 - index;

        if(str)
        {
            ui.i += mul * (*buff++ - '0');
            mul /= 10;
        }
        else
        {
            ui[pos] = ascii ? *buff++ - '0' : *buff++;
        }
    }
    return ui.i;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...