2016-12-21 2 views
0

어셈블리에서 한 가지 문제가 있습니다. 변수 points db 65을 만듭니다. 시작 값은 65이지만 프로그램에서이 값을 표시하려면10 진수 값 (masm32)

invoke CreateWindowEx,0,ADDR classStatic,ADDR points, WS_CHILD or WS_VISIBLE,100,100,50,50,hWnd,0,hInstance,0 

을 반환합니다. 이 예에서 문자 "A". "65"를 표시하도록 수정하려면 어떻게해야합니까?

+1

당신은 텍스트로 변환 할 필요가있다. 예를 들어'snprintf'를 보시려면 – Jester

+0

65는 두 개의 문자, '6'과 '5'입니다. 바이너리 (65)에서 문자열 ('65')로 변환하는 자체 프로 시저를 만들 수 있습니다. –

답변

4

함수는 N 문자로 끝나는 문자 시퀀스에 대한 포인터 인 C 스타일 문자열을 필요로합니다.

당신이 전달한 것은 실제로 잘못된 입력입니다. "A $^a! bunch? * of - @ (불쾌한^& + 쓰레기 {%"대신 "A"가 있습니다. 당신은 0 아마 때문에 어셈블러에 의해 삽입 된 패딩, 당신의 points 일정 후 배치했다 운이 있어요. 당신이 당신의 윈도우의 캡션으로 를 표시 할 경우에, 당신이 먼저 변환해야합니다

숫자를 문자열로 변환하는 방법이 있습니다. 여러 가지 방법이 있습니다. 가장 간단한 방법은 Win32 API에 연결 했으므로 wsprintf을 호출하는 것입니다. C 런타임 라이브러리에 링크 ary와 snprintf로 전화하십시오. 또는 숫자를 문자열로 변환하는 고유 한 코드를 작성할 수 있습니다.

당신의 문자열이 정적이라고 가정하면, 더 나은 접근 방식은 단순히 처음부터 문자열을 사용하는 것입니다 :

points db "65",0 

(points보다 더 좋은 이름을 선택 할 수 있습니다).


또한 Windows는 유니 코드 기반 운영 체제이며 2 바이트 UTF-16 유형을 통해 유니 코드를 구현합니다. 따라서 항상 명시 적으로 W- 포함 된 Windows API 함수 (또는 UNICODE_UNICODE 기호 정의)를 호출해야하며 문자열 문자는 WORD 크기 여야합니다. 따라서 코드는 다음과 같습니다

strCaption dw '6','5',0 
invoke CreateWindowExW,0,ADDR classStatic,ADDR strCaption, WS_CHILD or WS_VISIBLE,100,100,50,50,hWnd,0,hInstance,0 
+0

저는 간단한 게임을 만들어서'점 '이라는 이름이 좋다고 생각합니다. 65 단지 예입니다. 점은 0부터 시작하여 변경 될 것입니다. – Aloes

+0

그러면 정수를 문자열로 동적으로 구문 분석해야합니다. 나는 그것을하는 세 가지 다른 방법을 제안했다. 바퀴를 재발 명하려는 유일한 이유는 교육적인 목적 때문일 것입니다. 그렇지 않으면 표준 기능을 호출하여 대신 수행하십시오. –

+0

감사합니다.하지만 'wsprintf'가 내 프로그램 구문 오류로 나타납니다. – Aloes