опубликован 17-02-2002 15:16 MSK
А я б на ASM'е написал, потому что проще и есть замечательная инструкция xlat:static char ascii[256]; // таблица ascii символов
int HexStr2Str(char *pzDest, char *pzSrc)
{
__asm
{
mov esi,[pzSrc]
mov edi,[pzDest]
lea ebx,[ascii]
charloop:
lodsb
or al,al
jz done
sub al,30h
cmp al,9
jbe L1
sub al,7
L1:
mov ah,al
lodsb
sub al,30h
cmp al,9
jbe L2
sub al,7
L2:
shl ah,4
add al,ah
xlatb
stosb
jmp charloop
done:
mov BYTE PTR [edi],0
mov eax,edi
sub eax,[pzDest]
}
}
pzDest -> буфер для преобразованной строки
pzSrc -> исходная строка типа "65746F74657374"
Функция возвращает количество символов, записанных в pzDest.
ЗЫ: Вроде работает! :)
Только смущает меня то обстоятельство, что компилятор не понял более простой и эффективной команды процессора
aad 10h,
которая заменяет две команды:
shl ah,4
add al,ah :(