2012-04-03 2 views
1

415A6B31과 같은 문자열을 입력하고 어셈블리 함수가 AZk1 을 반환해야하므로 모든 2 바이트를 가져와 1 바이트로 변환해야합니다. 41 = A 5A = z 에2 바이트에서 16 진수 표현

조립 방법?

+3

변경 같은, 유일한 것은 당신이 어떻게 그것을 전달하는, 8 개 문자의 ASCII의 16 진수 문자열을 가정 그것을 – BlackBear

+0

보면 어떻게되는 데이터? EAX의 포인터? –

+0

문자열에 4를 입력하면 0x34 16 진수이고 1은 0x31 16 진수입니다. 그래서 레지스터 ebx가 0x34 값과 0x31 값을 첫 번째 바이트에 입력하고 싶다면 어떻게해야합니까 ?? – aseed

답변

0

처리중인 번호를 살펴보십시오. 문자열은 16 진수예요? 0-9의 16 진수를 조회하는 것은 0x30에서 0x39이며, 0xF를 사용하면 0-9를 얻습니다. (nybbles)는 0x4로, 0x1로, 0x5는 0xa는이 등 다음 바이트

에 니블을 결합하면 입질을 제공하는 문자열

if(byte>0x39) byte = byte - 7; 
byte=byte&0xF; 

의 각 바이트 있도록 0xF입니다와 AND 연산하는 0x41는하지만 0xa는 발생하지 않습니다

(0x4<<8)|0x1 = 0x41, (0x5<<4)|0xA = 0x5A, etc. 

C 언어 기호 :

<< means shift left 
& means and 
| means or 
- means subtract 
0x means the number is in hexadecimal 
+0

나는 다른 방법이 있다고 생각한다. nybbles .. – aseed

+0

한 번에 하나의 소스 문자 (한입) 또는 한 번에 두 개의 문자 (한 번에 두 개의 문자)를 사용하여 한 번에 65536 개의 조회 테이블을 사용하려고합니다. answer = table [(((uint16_t) source [n + 0]) << 8) | 소스 [n + 1])]; 만약 당신이 테이블을 사용하지 않는다면 당신은 본질적으로 그것을 니블로 분해하고 그것들을 합친다. if> 0x39 x- = 7 이외의 마지막 선택; 256 진드 룩업 테이블 (니블을 얻기 위해)입니다. –

+0

나는 바이트 - = 7 바이트 & = 0xF와 <<와 | 같은 기호 때문에 정말로 당신의 대답을 이해하지 못한다. – aseed