LINUX.ORG.RU

Bin<->Hex средствами Qt


0

0

Есть прога на qt в ней необходимо выполнить переобразование bin2hex и обратно, т.е. есть массив байтов(char), необходимо получить их hex представление. сейчас делаю так

for(int i=0;i<MAX;i++){ str+=QString("%1").arg(ushort(modulus[i]),2,16,QChar('0')); } Но мне кажется это корявым.


Есть метод QString::sprintf, аналогичный sprintf из libc, то есть в цикле пишешь:

str += QString().sprintf ("%02X", modulus[i]);

Shmuma
()
Ответ на: комментарий от platerx

Почему, интересно? И зачем обязательно Qt, это ведь 
за пару минут с нуля вручную делается. Например, 
длинный но простой и хорошё читабельный код:

const char hexsym [16] = "0123456789ABCDEF";

char * to_hex (void * p, int s) {
  int i;
  char * r = (char *) malloc (3 * s);
  
  for (i = 0; i < s; i++) {
    (3 * i) [r] = (((i [(char *) p]) >> 4) & 0x0F) [hexsym];
    (3 * i + 1) [r] = (i [(char *) p] & 0x0F) [hexsym];
    (3 * i + 2) [r] = 0x20;
  }
  (3 * s) [r] = 0;
  return r;
}

а есь извраты ваще в пару строчек, но с первого раза непонятно совсем.

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

Поясни, убогому, что означает запись: "(int)[pointer] = foo". Некий извратный способ работы с массивами? Первый раз такое встречаю.

Shmuma
()
Ответ на: комментарий от bugmaker

Вот что написанно по поводу метода sprintf в их мануале(QT 4.1.3)

Warning: We do not recommend using QString::sprintf() in new Qt code. Instead, consider using QTextOStream or arg(), both of which support Unicode strings seamlessly and are type-safe.

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

хм, способ как способ... В спецификации про С точно указано, что запись A[B] в точности эквивалентна записи B[A]. Нащёт С++ не помню достоверно, но это скомпиленное g++ работает.

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

>В спецификации про С точно указано, что запись A[B] в точности эквивалентна записи B[A]

Мда. Чем больше тонкостей, тем читабельней код?

Может для большей читабельности добавить макросов вида

#define M(A,B,C) C A B

Или написать транслятор с азбуки морзе на C?

Изящный изврат для утонченных извращенцев? Какими соображениями нужно руковоствоваться, чтобы добровольно a[12] заменить на 12[a] для большей читабельности(естесвенно кроме желания стать утонченным извращенцем и в своих глазах возвыситься над остальными)?

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

Бедный малтшык ниасилил спеки по С :( Там столько тонкостей, ужоснахъ!

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

>Мда. Чем больше тонкостей, тем читабельней код?

если ты не знаешь такую толстость, то ты не знаешь си и его синтаксиса

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