Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[6771] Re:C언어 - HEX 와 INT 변환 하기~~
개발자 [bombit] 21217 읽음    2012-08-29 02:58
볼랜드C에서 실행해보니 약간 컴파일이 다르네요
코드수정했습니다. 첨부참고..
   int number    =0 ;
   int Hexa      =0 ;
   int HexToInt  =0 ;
   int Index  =0 ;
   unsigned char  tmpd[65536];
   unsigned char  HValue[10+1];

   memset(&tmpd,  0X00,  sizeof(tmpd));
 
   strncpy(HValue,"0x",2);
 
   printf("*---------------------------*\n");
   printf("*        HexToInt           *\n");
   printf("*---------------------------*\n");
   printf("정수를 입력하세요. : ");
   scanf("%d",&number);
   if(number > 65536)
   {
    printf("65536보다 작은 정수를 입력하세요\n");
    return FAIL;
   }
   printf("\n*---------------------------*\n");
   for(Index = 0;Index<8 ;Index++)
   {
      Hexa = (number >> (28-Index*4)) & 0x0000000F;

      //printf(" Hexa [%d]\n", Hexa);
      strncpy(tmpd, (char *)(&Hexa),1);
      VAR_TO_HEXA(&Hexa,sizeof(Hexa), (char *)tmpd);

      sprintf(&HValue[Index+2],"%x",Hexa);
      HexToInt  =HexToInt + ( Hexa<<( 28-Index*4  ) );

   };
   printf("Hexa         :[%s] \n",&HValue );
   printf("HexToInt     :[%d] \n",HexToInt);
   printf("*---------------------------*\n");

   return SUCC;

/*----------------------------------------------*/
void VAR_TO_HEXA(void *vlu, int len, char *rStr)
{
    unsigned char *sVlu = vlu   ;
    register int  i             ;

    for(i=0;i<len;i++)
    {
        sprintf(rStr + (i << 1), "%02x", *(sVlu + i));
    };
};


개발자 님이 쓰신 글 :
: 1. 65535범위 이내 10진수 숫자를 16진수로 변환하여 char 배열 2Byte에 넣는방법
:  2. char 배열 2Byte에 저장된 16진수값을 10진수로 변환하는 방법
:
:    int index,i,j;
:    int number =0,Hexa =0;
:    int HexToInt = 0;
:    unsigned char  tmpd[32768]     ;
:    unsigned char  HValue[10+1];
:    memset(&tmpd,0x00,sizeof(tmpd));
:      
:    number =300;
:    strncpy(HValue,"0x",2);
:
:    _pf_dbgLog("*---------------------------*\n");
:    _pf_dbgLog("*        HexToInt           *\n");
:    _pf_dbgLog("*---------------------------*\n");
:   
:    for(j = 0;j<8 ;j++)
:    {
:       Hexa = (number>> (28-j*4)) & 0x0000000F;
:       strcpy(tmpd, (char *)Hexa);
:       VAR_TO_HEXA(&Hexa,sizeof(Hexa),(char *)tmpd);
:       sprintf(&HValue[j+2],"%x",Hexa);
:       HexToInt  += ( Hexa<<( 28-j*4  ) );
:    }
:    _pf_dbgLog("Hexa   :[%s] HexToInt     :[%d] \n",&HValue,HexToInt);
:    _pf_dbgLog("*---------------------------*\n");
:
:    return SUCC;
:
: /*16진수변환 함수*/
: void VAR_TO_HEXA(void *vlu, int len, char *rStr)
: {
:     unsigned char *sVlu = vlu   ;
:     register int  i             ;
:
:     for(i=0;i<len;i++)
:     {
:         sprintf(rStr + (i << 1), "%02x", *(sVlu + i));
:     }
: }
:
:
:
:
:
: 개발자 님이 쓰신 글 :
: : ==================================================
: : 1번질문에 대한 답입니다.
: : 2번질문은
: :                고민좀 해볼게요
: :                공통라이브러리가 있는데 그것좀 봐야겠네요
: :                16진수에서 10진수는 복잡해서..
: :                한자리씩 잘라서 쉬프트해서 계산해내는 함수가 있는데 더좋은방법을 생각해볼게요
: :
: :  typedef struct {
: :    int      iTemp_a ;
: :    int      iTemp_b ;
: :    char     sTemp_a[4+1];
: :    char     sTemp_b[4+1];
: :    char     sTemp_c[4+1];
: :  }TEMP_HEX;
: : 
: :    memset(&temphex  , 0x00 , sizeof(temphex));
: :   
: :    temphex.iTemp_a = 300;
: :
: :    sprintf(temphex.sTemp_a,"%04x",temphex.iTemp_a);
: :    /*2자리씩 잘라서 저장*/
: :    strncpy(temphex.sTemp_b,temphex.sTemp_a+0,2);
: :    strncpy(temphex.sTemp_c,temphex.sTemp_a+2,2);
: :
: :    printf("*---------------------------*\n");
: :    printf("*        IntToHex           *\n");
: :    printf("*---------------------------*\n");
: :    printf("   iTemp_a           :[%d]\n",temphex.iTemp_a);  
: :    printf("   sTemp_a           :[%s]\n",temphex.sTemp_a);  
: :    printf("   sTemp_b           :[%s]\n",temphex.sTemp_b);  
: :    printf("   sTemp_c           :[%s]\n",temphex.sTemp_c);  
: :    printf("*---------------------------*\n");
: :
: : =================================================================
: :
: :
: : Intotheblue 님이 쓰신 글 :
: : : 구조체까지 이용할거면..
: : : 조금 더 나가서.. 공용체를 사용하면 더 코드가 깔금해지죠..
: : :
: : :
: : :     union  tempmem
: : :     {
: : :
: : :         unsigned int Data;
: : :
: : :         struct
: : :         {
: : :             unsigned a1   :8;
: : :             unsigned a2  : 8;
: : :
: : :         } arr;
: : :     } ;
: : :
: : :
: : :     tempmem aa;
: : :     aa.Data = 300;
: : :
: : :     String a1 = AnsiString::IntToHex(aa.arr.a1,4);
: : :     String a2 = AnsiString::IntToHex(aa.arr.a2,4);
: : :
: : :     aa.arr.a1 = 0x2c;
: : :     aa.arr.a2 = 0x01;
: : :
: : :     String a3 = AnsiString::IntToHex(aa.Data,4);
: : :
: : :
: : :
: : :
: : : 개발자 님이 쓰신 글 :
: : : : ==================================================================================
: : : : typedef struct {
: : : :    int      iTemp_a ;
: : : :    char     sTemp_a[4+1];
: : : : }TEMP_HEX;
: : : :
: : : :    memset(&temphex  , 0x00 , sizeof(temphex));
: : : :  
: : : :    temphex.iTemp_a = 300;
: : : :    sprintf(temphex.sTemp_a,"%x",temphex.iTemp_a);
: : : :   
: : : :    printf("*---------------------------*\n");
: : : :    printf("*        IntToHex           *\n");
: : : :    printf("*---------------------------*\n");
: : : :    printf("   iTemp_a           :[%d]\n",temphex.iTemp_a);  
: : : :    printf("   sTemp_a           :[%s]\n",temphex.sTemp_a);  
: : : :    printf("*---------------------------*\n");
: : : :   
: : : :  이렇게 해도 되네요..
: : : :
: : : : ============================================================================
: : : :
: : : :
: : : : Intotheblue 님이 쓰신 글 :
: : : : : 뭔가 생각을 잘 못하고 있는것 같네요.
: : : : :
: : : : : 2 byte 에 65535 저장되어 있을경우..
: : : : : 이걸 16 진수로 해석하면 0xffff 가 되죠
: : : : : 이건 뭐 따로 변환하고 자시고 할 필요 없는겁니다.
: : : : : 같은값을 2진수냐,10진수냐,16진수로 처리하느냐에 따라서 다른건 뿐입니다.
: : : : : 그냥 65535를 보내면 되는겁니다.
: : : : :
: : : : : 보통은 16진수로 변한한다고 하는건..
: : : : : string 형태로 바꾸는건데..이건 2 byte 에 들어갈수가 없고 4바이트가 필요합니다.
: : : : :
: : : : : 참고로 빌더에서는
: : : : : IntToHex - int 를 16진수 형태 string 으로
: : : : : StrToInt 로 "0xff" 등을 int 값으로 전환이 됩니다.
: : : : :
: : : : :
: : : : : 준오아빠 님이 쓰신 글 :
: : : : : : 데이터통신할때 전문길이를 주고 받는데 특정업체의 경우 16진수 처리를 하고있습니다.
: : : : : : 65535를 16진수로 변환 하면 0XFFFF 인데
: : : : : : char 배열에  a[0] = 0XFF, a[1] = 0XFF 로 저장됩니다.
: : : : : :
: : : : : : C언어로 이렇게 변환하는 소스는 어떻게 구현할까요?
: : : : : : 쉬운것 같은데 잘 안되네요
: : : : : :
: : : : : : 1. 65535범위 이내 10진수 숫자를 16진수로 변환하여 char 배열 2Byte에 넣는방법
: : : : : : 2. char 배열 2Byte에 저장된 16진수값을 10진수로 변환하는 방법
: : : : : :
: : : : : : 아시는 분은 댓글 달아주세요

+ -

관련 글 리스트
6741 hexa와 decimal 변환할줄 아시는분 답변부탁드립니다. 준오아빠 11501 2012/08/16
6742     Re:hexa와 decimal 변환할줄 아시는분 답변부탁드립니다. Intotheblue 26348 2012/08/16
6746         Re:Re:hexa와 decimal 변환할줄 아시는분 답변부탁드립니다. 개발자 10568 2012/08/21
6747             Re:Re:Re:hexa와 decimal 변환할줄 아시는분 답변부탁드립니다. Intotheblue 38424 2012/08/21
6748                 Re:Re:Re:Re:C언어 - hexa와 decimal 변환 (수정.) 개발자 11019 2012/08/21
6770                     Re:Re:Re:Re:Re:C언어 - hexa와 decimal 변환 1번,2번답 개발자 14828 2012/08/28
6771                         Re:C언어 - HEX 와 INT 변환 하기~~ 개발자 21217 2012/08/29
6743         로직처리가능하신분 답변부탁드립니다. 준오아빠 9627 2012/08/17
6744             Re:로직처리가능하신분 답변부탁드립니다. Intotheblue 5314 2012/08/17
6745                 Re:Re:로직처리가능하신분 답변부탁드립니다. 준오아빠 25758 2012/08/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.