[완료] 진수 변환 관련 질문 드립니다..
글쓴이: facered79 / 작성시간: 일, 2010/10/10 - 6:03오후
안녕하세요. 4바이트형 10진수를 입력 받았을 시 이를 16진수로 변환하고
2바이트의 char 배열에 저장하기 위해 어떤 작업을 해야하는지 질문 드립니다..
만약 300 이란 10진수를 입력 받았을 시 16 진수로 고치면 12C 가 되는데.
이것을 어떻게 char buf[2] 에 저장하는건지 방법을 모르겠습니다..
각바이트를 출력 하면
01 2C
위와같이 출력 되야 합니다..
조언 부탁 드립니다..
Forums:


C언어를 기준으로,
C언어를 기준으로, 숫자형은 형이라고 한다면
대개의 경우 2진수입니다. C코드에서 100이라고 써도 실제로 컴파일되서 기계가 다룰때는 2진수로 다룬다는거죠.
따라서 그 4바이트형이 자료를 어떻게 가지고 있나, 보면
x86등의 little-endian의 경우 (16진수로 1바이트씩 보면)
가 됩니다.
char[2] 를 short로 캐스팅해서 거기다 대입하고,
printf에서 %c 로 찍어주면 원하는 결과가 나오겠지요.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
답변 감사합니다.. 그런데.. 이해가 잘 안되서요.
uint32_t vid32 = 300;
unsigned char tmp[2];
for (int i = 0, j=0; i < 4 ; i++,j++)
{
printf("%x\n",(unsigned char)((vid32>> (4-i)*8) & 0xFF));
}
위와 같이 하면, 2c 00 00 01 이 되네요.
위와 같은 상황에서 tmp[2] 에 입력 가능한 코드를 받아볼수 있을까요..
아래는 제가 작성한 소스인데. 일단 각 바이트에 1과 2c 는 들어가는것으로 보입니다.
맞는것인지요..
unsigned char low = (unsigned char)((vid32>>8) & 0xFF);
unsigned char hi = (unsigned char)((vid32>>32) & 0xFF);
low = 1
hi = 2c
위 쓰신 코드는
위 쓰신 코드는 잘못된 부분이 하나 있습니다. i가 0인경우, vid32>>32 를 계산하게 되지요.
K&R에 따르면, >> 연산에서 오른쪽 인자는 0보다 크거나 같고, 해당 자료형의 비트수보다 작아야합니다.
같거나 크면, 그 연산 결과는 정의되어있지 않음(undefined)입니다.
따라서, 결과를 보고 싶다면 다음과 같이 고쳐야 합니다.
uint32_t vid32 = 300; unsigned char tmp[2]; for (int i = 0, j=0; i < 4 ; i++,j++) { printf("%x\n",(unsigned char)((vid32>> (4-i-1)*8) & 0xFF)); }결과는
가 되죠.
그렇다면 char a[2]; 에는 어떻게 넣을것인가..
nt main(){ unsigned vid32 = 300; unsigned char tmp[2]; *((unsigned short *)tmp) = vid32; printf("%x %x\n", tmp[0], tmp[1]); return 0; }결과
가 됩니다. 물론 big endian에서는 결과가 반대로 1 2c로 나타날 것입니다.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
정말 감사합니다..
말씀해 주신 내용을 보니 이제야 이해가 갑니다.
문제가...
설명이 좀 애매한데요..
아마..
입력 - 300
출력 - 01 2C
인데, 출력이 output[2][2]={{0x30,0x31}, {0x32, 0x43}};
이렇게 저장되는 걸 원하시는 것 같습니다.
1. 입력이 스트링이라면, string --> (ascii -->) numeric number 로 변환합니다.
2. 1번의 결과를 sprintf 등의 버퍼 출력함수를 이용해 버퍼에 넣으시면 됩니다.