ENDIANS 질문 드립니다.. M [[problem:ENDIANS]] ~~~c #include #include #include int main(){ int n; unsigned int num, i; char r; char test[9] = ""; scanf("%d", &n); while(n--){ scanf("%d", &num); for(i=0;i<8;i++){ //16진수로 만들어 배열에 저장하는 for문 if((num%16)==15) test[7-i] = 'f'; else if((num%16)==14) test[7-i] = 'e'; else if((num%16)==13) test[7-i] = 'd'; else if((num%16)==12) test[7-i] = 'c'; else if((num%16)==11) test[7-i] = 'b'; else if((num%16)==10) test[7-i] = 'a'; else{ r = num%16; test[7-i] = r+48; //ASCII 코드를 사용해서 더해주는값 // 48을 더해줘야 제대로 출력됨 } num = num/16; } char endian[10] = {test[6], test[7], test[4], test[5], test[2], test[3], test[0], test[1]}; //endian을 바꿔줌 unsigned int t = strtol(endian,NULL,16); printf("%u\n", t); //바꾼 endian을 10진수로 다시 출력 } } ~~~ 일단 예시는 입출력이 제대로 됩니다. 예시말고 다른숫자를 입력했을 때 제대로 출력이 안된다는거겠지요..? 물론 제가 코딩을 잘못해서 그런거겠지만 어디가 어떻게 잘못된건지 감도 잘 안잡히는터라...; 제가 우분투 64비트를 쓰고 있는데 그거 때문에 char나 int 타입의 바이트가 2배가 되버려서 그런건지.. 그래서 타입을 이것저것 바꿔봤지만 그거때문은 아닌거 같아서요 어떤 문제가 있는지 잘 감이 안잡히기에 이렇게 애매한 질문은 안되는 거 알지만 질문해봅니다 도와주세요 ㅠ... 12년 전
4개의 댓글이 있습니다. kriii strtol함수의 리턴형이 long이라 생기는 문제로 보입니다. 12년 전 link kriii 아래처럼 하면 정답이 잘 나옵니다. ~~~ c++ char endian[12] = {'0','x',test[6], test[7], test[4], test[5],test[2], test[3], test[0], test[1], 0}; unsigned int t; sscanf (endian,"%x",&t); printf("%u\n", t); ~~~ 12년 전 link Being 일부 x64 환경에서는 long이 64비트 부호 있는 정수(signed integer)였겠으나, 채점 환경이 x86 기반인데다가 표준에서조차 그 크기를 강제하고 있지 않은 관계로 32비트 부호 있는 정수로 처리되어 생긴 문제입니다. 12년 전 link M 감사합니다 이렇게 해야하는군요... 어렵네요 ㅠ... 잘 기억해두겠습니다. 12년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
M
[[problem:ENDIANS]]
~~~c
#include
#include
#include
int main(){
int n;
unsigned int num, i;
char r;
char test[9] = "";
scanf("%d", &n);
while(n--){
scanf("%d", &num);
for(i=0;i<8;i++){ //16진수로 만들어 배열에 저장하는 for문
if((num%16)==15) test[7-i] = 'f';
else if((num%16)==14) test[7-i] = 'e';
else if((num%16)==13) test[7-i] = 'd';
else if((num%16)==12) test[7-i] = 'c';
else if((num%16)==11) test[7-i] = 'b';
else if((num%16)==10) test[7-i] = 'a';
else{
r = num%16;
test[7-i] = r+48; //ASCII 코드를 사용해서 더해주는값
// 48을 더해줘야 제대로 출력됨
}
num = num/16;
}
}
~~~
일단 예시는 입출력이 제대로 됩니다.
예시말고 다른숫자를 입력했을 때 제대로 출력이 안된다는거겠지요..?
물론 제가 코딩을 잘못해서 그런거겠지만
어디가 어떻게 잘못된건지 감도 잘 안잡히는터라...;
제가 우분투 64비트를 쓰고 있는데 그거 때문에 char나 int 타입의 바이트가 2배가 되버려서
그런건지.. 그래서 타입을 이것저것 바꿔봤지만 그거때문은 아닌거 같아서요
어떤 문제가 있는지 잘 감이 안잡히기에 이렇게 애매한 질문은 안되는 거 알지만
질문해봅니다 도와주세요 ㅠ...
12년 전