как получить HEX-представление байта?
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
как получить HEX-представление байта? - 2008-03-03 01:12:32.170000
|
|
|
RasenHerz
Сообщений: 303
Оценки: 0
Присоединился: 2007-11-27 21:17:15.833333
|
как осуществить преобразование значение байта, к примеру, 10, в 0хa ? по какому принципу осущствляется преобразование?
|
|
|
RE: как получить HEX-представление байта? - 2008-03-03 01:49:12.600000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
ммм… тебе надо просто вывести в другой системе? Покопай википедию про системы счисления. Лень расписывать как ;).
|
|
|
RE: как получить HEX-представление байта? - 2008-03-03 02:01:00.990000
|
|
|
красный ерюпь
Сообщений: 16
Оценки: 0
Присоединился: 2008-03-02 16:30:36.246666
|
ну вообще есть такая функция IntToHex(); -Целое Value в строку с минимум Digits шестнадцатеричных цифр Digits Cтрока с нулевым символом в конце содержащая до 18 для Extended или 19 для Currency значащих цифр … Десятичная точка нехранится .завершающюи нули удаляются Если число равно нулю NAN или INF,Digits содержит только нулевой символ…
|
|
|
RE: как получить HEX-представление байта? - 2008-03-03 11:32:15.456666
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
Вот код на асме:
MOV EAX,403000 ; В dword ptr ds:[403000], Dec значение
CALL @Dec2Hex
JMP @Exit
@Dec2Hex: ;<= Procedure Start
PUSH EDI
PUSH EBX
MOV EDI,EAX
MOV ECX,-1
XOR EAX,EAX
REPNE SCAS BYTE PTR ES:[EDI]
NOT ECX
DEC ECX
JE @Dec2Hex_00401051
SUB EDI,2
XOR EBX,EBX
INC EAX
MOV DWORD PTR DS:[0403010h],EAX
@Dec2Hex_00401029:
XOR EAX,EAX
MOV AL,BYTE PTR DS:[EDI]
CMP AL,02Dh
JE @Dec2Hex_0040104D
AND AL,0Fh
MUL DWORD PTR DS:[0403010h]
ADD EBX,EAX
IMUL EAX,DWORD PTR DS:[0403010h],0Ah
MOV DWORD PTR DS:[0403010h],EAX
DEC EDI
DEC ECX
JNZ @Dec2Hex_00401029
JMP @Dec2Hex_0040104F
@Dec2Hex_0040104D:
NEG EBX
@Dec2Hex_0040104F:
MOV EAX,EBX
@Dec2Hex_00401051:
POP EBX
POP EDI
RETN
Функция вернет HEX значение
|
|
|
RE: как получить HEX-представление байта? - 2008-03-03 14:24:18.703333
|
|
|
Absurd
Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
|
quote:
ORIGINAL: RasenHerz как осуществить преобразование значение байта, к примеру, 10, в 0хa ? по какому принципу осущствляется преобразование? Ты меня пугаешь.
char hex[5];
sprintf(hex, "0x%x", 10);
printf("%s", hex);
|
|
|
RE: как получить HEX-представление байта? - 2008-03-03 17:35:08.906666
|
|
|
RasenHerz
Сообщений: 303
Оценки: 0
Присоединился: 2007-11-27 21:17:15.833333
|
quote:
Ты меня пугаешь. char hex[5]; sprintf(hex, "0x%x", 10); printf("%s", hex); ты, наверное, еще больше испугаешься когда узнаешь что я хочу код реализующий данную функциональность написать сам. про sprintf я слышал, но мне надо написать код "под меня". вот потому и спрашиваю по какому принципу происходит перевод!
|
|
|
RE: как получить HEX-представление байта? - 2008-03-03 17:46:03.013333
|
|
|
Absurd
Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
|
quote:
ORIGINAL: RasenHerz quote:
Ты меня пугаешь. char hex[5]; sprintf(hex, "0x%x", 10); printf("%s", hex); ты, наверное, еще больше испугаешься когда узнаешь что я хочу код реализующий данную функциональность написать сам. про sprintf я слышал, но мне надо написать код "под меня". вот потому и спрашиваю по какому принципу происходит перевод! Ну, перевод между системами счисления - это одно из базовых программистских знаний. Его еще в школе на бейсике делают. В шестнадцатиричной системе можно использоватьупрощенный а не не обобщенный алгоритм, сначала взяв значение старших 4 бит байта сдвинув его на 4 разряда вправо операцией >>: unsigned char loquad = byte >> 4, а потом младших замаскировав старшие 4 бита: unsigned char hiquad = byte & 0x0f. Обе половинки будут в диапазоне 0 - 15. Если половинка меньше 10, выводим соответствующее число в диапазоне 0 - 9. Если больше, то 10 - это A, … и тд до 15 - это F. Сначала выводим содержимое старшей, а потом младшей половинки.
|
|
|
|
|