C언어에서 16진수를 사용하는 이유와 의미???

jaykldp의 이미지

C언어 초보 입니다.

정말 궁금한 점이 있습니다.

현재 분석 중인 코드를 보면, 어떤 부분에는 10진수를 어떤 부분에는 16진수를 사용하고 있습니다.

궁금한 점은...
코딩을 하다... 언제, 왜 16진수를 사용하는지와 16진수를 사용함으로 얻을 수 있는 이점 등등...
c언어 and 16진수에 관해 궁금해 질문 작성해 봅니다.

불쌍한 초보 구원하신다 생각하시고, 자세한 답변 좀 부탁 드리겠습니다.
미리 감사 드립니다.

static u8 is_mostly_ascii(struct http_response* res) {
  u32 i, total, printable = 0;
 
  if (res->doc_type) return (res->doc_type == 2);
 
  total = (res->pay_len > 128) ? 128 : res->pay_len;
 
  if (!total) { res->doc_type = 2; return 1; }
 
  for (i=0;i<total;i++)
    if ((res->payload[i] >= 0x20 && res->payload[i] <= 0x7f)
        || (res->payload[i] && strchr("\t\r\n", res->payload[i])))
      printable++;
 
  if (printable * 100 / total < 90) {
    DEBUG("* looks like binary data (print = %u, total = %u)\n",
          printable, total);
    res->doc_type = 1;
    return 1;
  }
 
  DEBUG("* looks like text file (print = %u, total = %u)\n",
        printable, total);
 
  res->doc_type = 2;                                                                                         
  return 1;                                                                                                  
 
}       
Prentice의 이미지

ASCII 코드에서 0x20은 스페이스, 0x7f는 7-bit ASCII의 마지막 값입니다.

아스키 코드 좀 다뤄봤다 하면 0x20이 스페이스라는 점은 직관적으로 떠올릴 수 있을 것으로 예상하고 그렇게 적은 것이 아닐까 싶습니다.

Necromancer의 이미지

컴퓨터가 처리하는 데이터는 2진수 입니다. 16진수 한자리는 2진수 4자리에 정확하게 대응되서 표시할 수 있는 자릿수가 줄어듭니다. 어셈블리 코딩시에 이게 중요함.
그리고 지금 나오는 컴퓨터들은 최소 처리 단위가 8bit로 통일되어 있는것도 한몫 합니다(16진수 2자리로 끝), 과거에는 8진수도 쓰였는데 자릿수가 안맞아서 사장됐죠.

비트단위 처리가 중요하다면 16진수 많이 쓰고, 사람이 편하게 숫자계산 한다면 10진수 쓴다 생각하시면 됩니다.

Written By the Black Knight of Destruction

rgbi3307의 이미지

맞습니다.
C언어에서 처리하는 데이터 타입이
2진수, 8진수, 16진수, 10진수, 문자, 문자열.. 등이 있는데
내가 처리하고자 하는 데이터를 어떻게 표현하는 것이 더 좋은가? 를
이해하여 코딩하시면 될듯 합니다.

From:
*알지비 (메일: rgbi3307(at)nate.com)
*커널연구회(http://www.kernel.bz/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))

익명 사용자의 이미지

순전히 코딩하는 사람 마음이지만, 저 같은 경우는 개인적으로 이런 식으로 일종의 규칙(?) 이 있습니다.
이것도 물론 정말 이걸 의식하면서 딱 정해놓고 지키고 있는 그런 건 아닙니다.

쉽게 말해서 숫자가 어떤 진법으로 표현할 때 직관적인지를 보고 적습니다.
가령, 0x80000000 이라는 숫자를 적어야 할 때 2147483648 로 적을 이유가 전혀 없습니다.
반대로 Sleep(10000); 을 적는데 Sleep(0x2710) 이라고 적을 이유가 없습니다.

한마디로 보기 편하고 이해하기 쉽게 그때 그때 맞춰서 적습니다.
위의 Sleep 같은 경우를 예로 들면 0x2710 으로 적으면 이게 몇 초인지 퍼뜩 알기 어려운 반면
10진법으로 적어야 이해가 바로 되죠. 원래 인자의 역할 특성상 그렇고요.

그리고 만약 VirtualAlloc 으로 1페이지를 할당한다고 할 때 0x1000 이라고 적지 4096 이라고는 안 적는 편입니다.
뭐 4096 정도는 그냥 10진법으로 적어도 별 문제될 건 아닙니다만 0x40000 이면 262144 으로 적는 것 보단 낫죠.
이 부분의 경우 페이지 단위가 4KB(KiB) 즉 4096byte 이기 때문에 16진법으로 적을 때 좀 더 직관적인 것입니다.
(보통 메모리 주소의 경우 16진법으로 표현하는 것이 일반적이죠.)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.