sdk у устройства такое. Оно принимает команды в ASCII в заданном формате. В устройство же нужно заливать некие флаги, которые мне удобно представлять в виде enum'ов, которые я потом и преобразую в quint'ы, к тому же структура памяти там весьма фиксированная: есть блоки памяти по 8, 16, 32 бита. Ну а 64 просто для удобства, дабы загнать все в одно число.
Дык это, есть считыватель карт, который цепляется через /dev/ttyUSB0, у него есть некий набор команд, причем в ASCII формате вместо бинарного, да еще и обязательно в виде xx xx xx xx\r\n, видимо писали его «для облегчения жизни программиста». В итоге вместо того, чтобы просто подцепить QDataStream и передать нужные байтики в контроллер (или же считать их) я вынужден писать конвертер из обычного потока байтов в некий страшный ASCII протокол. В принципе можно сделать конвертилку QByteArray в QString с заданным видом
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 меньше или равно нулю, количество групп вычислится автоматически.