วันเสาร์ที่ 6 ตุลาคม พ.ศ. 2555

โค้ด [ภาษาซี] โปรแกรมแปลงเลขฐาน 2 เป็นเลขฐาน 16

โปรแกรมแปลงเลขฐาน 2 เป็นเลขฐาน 16


Code:

#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "math.h"

void conBin2Hex(char *);

void main(){
      char BinsIn[100];
      char HexIn[25];
      int a=15,b;

      printf("\t\t\tEnter a Binary value:");
            scanf("%s",BinsIn);
            conBin2Hex(BinsIn);            //เรียกใช้ฟังก์ชันแปลงเลขฐาน 2 เป็นฐาน 16
      }

void conBin2Hex(char* BinStr){        //ฟังก์ชันแปลงเลขฐาน 2 เป็นฐาน 16
      int count;
      int ln, i;
      int Dec = 0.0;
      char Hexs[25];
      int j;
      char isValid=1;
      ln = strlen(BinStr) ;

            if(ln%4 == 0){
                  j=ln/4; }
            else{
                  j=ln/4+1; }
      Hexs[j]='\0';
      i = ln;

while (i > 0){
      count = 0;
      Dec = 0;
            while (count < 4 && i>0){
                  i--;
                        if (BinStr[i] == '1'){
                              Dec += pow(2, count);
                        }
                        else if(BinStr[i] == '0'){

                        }
                        else{
                            printf("\n\t\t\t***Invalid Binary Input enter only 0 or 1");
                            isValid=0;  break;
                        }
      count++;
   }

                        if(Dec<10){
                              Hexs[--j]=48+Dec;      }
                        else{
                              Hexs[--j]=55+Dec;      }
  }

      if(isValid==1){
            printf("\n\n\t\t----------------------Output----------------------");
            printf("\n\t\tThe Hexadecimal Value of %s is %s\n",BinStr,Hexs);
            printf("\t\t--------------------------------------------------");
 }
}

Output:

 

2 ความคิดเห็น:

  1. ln = strlen(BinStr) ;

    if(ln%4 == 0){
    j=ln/4; }
    else{
    j=ln/4+1; }

    ช่วยอธิบายให้ทีละบรรทัดได้ไหมค่ะ พอดีเขียน Code คล้ายๆแบบนี้กำลังงงอยู่ค่ะ
    tempo=atoi(bufs);

    for(i=15;i>0;i--)
    {
    if((tempo%2)==1)
    out[i]=1;
    else out[i]=0;

    tempo=tempo/2;
    }
    out[0]=tempo;
    }

    Code ที่เขียนและยังไม่เข้าใจค่ะ


    ขอบคุณล่วงหน้านะค่ะ

    ตอบลบ
    คำตอบ
    1. tempo=atoi(bufs); ตัว atoi จะเป็นการเปลี่ยนค่า bufs เปล็นตัวเลขนะคับ

      for(i=15;i>0;i--) ลูปวนทั้งหมด 15 รอบคับ ถ้า i>0 คับ
      {
      if((tempo%2)==1) ถ้า tempo หารเอาเศษแล้ว เท่ากับ 1 ก็จะทำใน if นี้ ถ้าไม่ใช่ก็จะทำที่ else
      out[i]=1;
      else out[i]=0;

      tempo=tempo/2;
      }
      out[0]=tempo; แล้วให้ตัวแปร out ซึ่งเป็นอาเรย์ มารับค่าจากตัวแปร tempo นะคับ
      }

      ลบ