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진수로 변환하는 방법
: : : : :
: : : : : 아시는 분은 댓글 달아주세요
|