LINUX.ORG.RU

а если в строке будет две однозначных цифры? Или этого не может случиться? Например, 3181 => 03 01 81.

placement_new ★★
()
Ответ на: комментарий от Gorthauer

ну если «sprintf deprecated»… :)

inline QString foo(int x) {
        char buf[] = "00 00 00";
        div_t t;
        t = div(x, 10);      buf[7] += t.rem;
        t = div(t.quot, 10); buf[6] += t.rem;
        t = div(t.quot, 10); buf[4] += t.rem;
        t = div(t.quot, 10); buf[3] += t.rem;
        t = div(t.quot, 10); buf[1] += t.rem;
        t = div(t.quot, 10); buf[0] += t.rem;
        return QString(buf);
}

;)

arsi ★★★★★
()
Ответ на: комментарий от Gorthauer

ну я же не в курсе о полном тз. я под пример написал.

arsi ★★★★★
()
Ответ на: комментарий от yoghurt

sdk у устройства такое. Оно принимает команды в ASCII в заданном формате. В устройство же нужно заливать некие флаги, которые мне удобно представлять в виде enum'ов, которые я потом и преобразую в quint'ы, к тому же структура памяти там весьма фиксированная: есть блоки памяти по 8, 16, 32 бита. Ну а 64 просто для удобства, дабы загнать все в одно число.

Gorthauer ★★★★★
() автор топика
Ответ на: комментарий от Gorthauer

задачу опиши детально :)

или дай несколько примеров, по которым будет однозначно понятно, что нужно реализовать.

arsi ★★★★★
()
Ответ на: комментарий от arsi

Дык это, есть считыватель карт, который цепляется через /dev/ttyUSB0, у него есть некий набор команд, причем в ASCII формате вместо бинарного, да еще и обязательно в виде xx xx xx xx\r\n, видимо писали его «для облегчения жизни программиста». В итоге вместо того, чтобы просто подцепить QDataStream и передать нужные байтики в контроллер (или же считать их) я вынужден писать конвертер из обычного потока байтов в некий страшный ASCII протокол. В принципе можно сделать конвертилку QByteArray в QString с заданным видом

Gorthauer ★★★★★
() автор топика
Ответ на: комментарий от Gorthauer

всёравно мало информации :(

QString foo(long long x, int n = 0) {
        char buf[] = "00 00 00 00 00 00 00 00 00 00", *p = buf + 30;
        lldiv_t t;
        t.quot = x;

        do {
                --p;
                t = lldiv(t.quot, 10); *--p += t.rem;
                t = lldiv(t.quot, 10); *--p += t.rem;
        } while (n > 0 ? --n : t.quot);

        return QString(p);
}

long long можно заменить на qint64. если х меньше нуля, на выходе будет мусор. если n больше нуля, на выходе будет ровно n групп цифр. если n больше десяти, получим сегфолт (скорее всего). если n меньше или равно нулю, количество групп вычислится автоматически.

arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.