Показать сообщение отдельно

  #4387  
Старый 29.11.2009, 05:46
Gray_Wolf
Постоянный
Регистрация: 07.03.2009
Сообщений: 357
С нами: 9042754

Репутация: 399
По умолчанию

Есть строка
Код:
unsigned char buf[16];
содержащая 32 шестнадцатеричных символа.

Нужно получить строку содержащую ASCII коды этих символов:
если
buf="aaa"
нужно получить
buf2="616161"

основная проблема в том что функция в которой это всё должно происходить на данный момент запускается ~860 000 раз в секунду и "тупое" преобразование может её очень сильно замедлить...

UPD:
помогли в другом месте.
Используется вставка ассемблера:
Код:
inline void HexToAscii(unsigned char *szTo, unsigned char *pFrom, int n)
{
   DWORD szHex[4];
   szHex[0] = '3210';
   szHex[1] = '7654';
   szHex[2] = 'ba98';
   szHex[3] = 'fedc';

   __asm
   {
   pushad

   mov esi,pFrom
   mov edi,szTo
   lea edx,szHex

L1:   movzx eax,byte ptr[esi]
   inc esi

   mov ecx,eax
   and eax,0xF
   shr ecx,4

   movzx ecx,byte ptr[edx+ecx]
   movzx eax,byte ptr[edx+eax]

   shl eax,8
   or eax,ecx

   mov [edi],ax
   add edi,2

   dec n
   jNZ short L1

   popad
   }
}

Последний раз редактировалось Gray_Wolf; 29.11.2009 в 09:13..
 
Ответить с цитированием