
29.11.2009, 05:46
|
|
Постоянный
Регистрация: 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..
|
|
|