[완료] 진수 변환 관련 질문 드립니다..

facered79의 이미지

안녕하세요. 4바이트형 10진수를 입력 받았을 시 이를 16진수로 변환하고

2바이트의 char 배열에 저장하기 위해 어떤 작업을 해야하는지 질문 드립니다..

만약 300 이란 10진수를 입력 받았을 시 16 진수로 고치면 12C 가 되는데.

이것을 어떻게 char buf[2] 에 저장하는건지 방법을 모르겠습니다..

각바이트를 출력 하면

01 2C

위와같이 출력 되야 합니다..

조언 부탁 드립니다..

mithrandir의 이미지

C언어를 기준으로, 숫자형은 형이라고 한다면
대개의 경우 2진수입니다. C코드에서 100이라고 써도 실제로 컴파일되서 기계가 다룰때는 2진수로 다룬다는거죠.
따라서 그 4바이트형이 자료를 어떻게 가지고 있나, 보면
x86등의 little-endian의 경우 (16진수로 1바이트씩 보면)

Quote:

2C 01 00 00

가 됩니다.

char[2] 를 short로 캐스팅해서 거기다 대입하고,

printf에서 %c 로 찍어주면 원하는 결과가 나오겠지요.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

facered79의 이미지

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

mithrandir의 이미지

위 쓰신 코드는 잘못된 부분이 하나 있습니다. 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));
}

결과는

Quote:

0
0
1
2c

가 되죠.

그렇다면 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;
}

결과

Quote:

2c 1

가 됩니다. 물론 big endian에서는 결과가 반대로 1 2c로 나타날 것입니다.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

facered79의 이미지

말씀해 주신 내용을 보니 이제야 이해가 갑니다.

pajaebeo의 이미지

설명이 좀 애매한데요..
아마..
입력 - 300
출력 - 01 2C
인데, 출력이 output[2][2]={{0x30,0x31}, {0x32, 0x43}};
이렇게 저장되는 걸 원하시는 것 같습니다.

1. 입력이 스트링이라면, string --> (ascii -->) numeric number 로 변환합니다.
2. 1번의 결과를 sprintf 등의 버퍼 출력함수를 이용해 버퍼에 넣으시면 됩니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.