Re: Использование переменных цикла после цикла
От: Khimik  
Дата: 23.09.23 09:50
Оценка:
Вот ещё вопрос по близкому коду, чтобы не создавать тему. Мне надо перевести эту функцию на Delphi:

static int receivebits(int buf[], int num_of_bits) {

    int cnt, num; 
    unsigned int lastbits, lastbyte;
    unsigned char * cbuf;
    int mask = (1 << num_of_bits) -1;

    cbuf = ((unsigned char *)buf) + 3 * sizeof(*buf);
    cnt = buf[0];
    lastbits = (unsigned int) buf[1];
    lastbyte = (unsigned int) buf[2];
    
    num = 0;
    while (num_of_bits >= 8) {
    lastbyte = ( lastbyte << 8 ) | cbuf[cnt++];
    num |=  (lastbyte >> lastbits) << (num_of_bits - 8);
    num_of_bits -=8;
    }
    if (num_of_bits > 0) {
    if (lastbits < num_of_bits) {
        lastbits += 8;
        lastbyte = (lastbyte << 8) | cbuf[cnt++];
    }
    lastbits -= num_of_bits;
    num |= (lastbyte >> lastbits) & ((1 << num_of_bits) -1);
    }
    num &= mask;
    buf[0] = cnt;
    buf[1] = lastbits;
    buf[2] = lastbyte;
    return num; 
}


ChatGPT перевёл, и компилятор выдаёт предупреждение из-за того, что сравниваются два разных интегера — беззнаковый и со знаком. В данном случае есть int num_of_bits, есть unsigned int lastbits, и они напрямую сравниваются: if (lastbits < num_of_bits) { . Тут нет если не ошибки, то по крайней мере лёгкой оплошности в этом С коде?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать." Р.П. Уоррен
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.