char a[9]={0,}; char b[9]={0,}; 일때,
&a = 0049E613 &b = 0049E607
입니다.
이때, 이것을 Float의 c와 d에 넣고 싶습니다.
가르침을......T_T
넣었을때 보여지는 float값 자체가 유의미해야 할 필요가 없다면 저 값들을 더블워드로 변환하고 나서 걍 메모리카피로 넣어버리면 되긴 할건데.. 32비트 기준 float도 4바이트이니까요.
-- This is for you new people. I have just one rule : Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?
--
다른 곳에서 사용할 숫자 이기때문에 문자열로 나온 저 16진수가 Float로 변환되어야 하거든요.
----------------------------------------------- 어머니, 그 이름만으로도 우리는 풍요로와 집니다.
효도합시다...... -----------------------------------------------
1자리 부터 16^(n-1)을 곱해줘서 10진수로 한다음 캐스팅하면 되죠.
이럴 때 union을 쓰는 거죠
union { char a[4]; float c; }
a[0] = 0x00 a[1] = 0x49 a[2] = 0xE6 a[3] = 0x13
c is 0x0049E613
char a[9]={0,}; char b[9]={0,}; char tmpC[64] = {0}; char tmpD[64] = {0}; char temp[8] = {0}; int i; int len; float fl,ftmp; printf("address a = %x\n",&a); printf("address b = %x\n",&b); sprintf(tmpC,"%x",&a); sprintf(tmpD,"%x",&b); for(i=0;i<strlen(tmpC);i++) { len = strlen(tmpC); ftmp = 16 * (len-1); if(ftmp == 0) ftmp = 1; if(*(tmpC[i]) == 'A') { fl = fl + (10 * ftmp); } else if(*(tmpC[i]) == 'B') { fl = fl + (11 * ftmp); } else if(*(tmpC[i]) == 'C') { fl = fl + (12 * ftmp); } else if(*(tmpC[i]) == 'D') { fl = fl + (13 * ftmp); } else if(*(tmpC[i]) == 'E') { fl = fl + (14 * ftmp); } else if(*(tmpC[i]) == 'F') { fl = fl + (15 * ftmp); }else { memset(temp,0x00,sizeof(temp)); memcpy(temp,*(tmpC[i]),1); fl = fl + ( atoi(temp) * ftmp); } } printf("fl = %ld\n",fl);
방가워요
텍스트 포맷에 대한 자세한 정보
<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]
어떤 형태로 넣고싶으신 것인지요?
넣었을때 보여지는 float값 자체가 유의미해야 할 필요가 없다면
저 값들을 더블워드로 변환하고 나서 걍 메모리카피로 넣어버리면 되긴 할건데.. 32비트 기준 float도 4바이트이니까요.
--
This is for you new people. I have just one rule :
Everyone fights, no one quits. If you don't do your job, I'll shoot you myself. Do you get me?
--
...
다른 곳에서 사용할 숫자 이기때문에 문자열로 나온 저 16진수가 Float로 변환되어야 하거든요.
-----------------------------------------------
어머니,
그 이름만으로도 우리는 풍요로와 집니다.
효도합시다......
-----------------------------------------------
1자리 부터 16^(n-1)을 곱해줘서 10진수로 한다음 캐스팅
1자리 부터 16^(n-1)을 곱해줘서 10진수로 한다음 캐스팅하면 되죠.
이럴 때
이럴 때 union을 쓰는 거죠
union {
char a[4];
float c;
}
a[0] = 0x00
a[1] = 0x49
a[2] = 0xE6
a[3] = 0x13
c is 0x0049E613
이런식으로 하면될듯...확인은 안해봤지만..
방가워요
댓글 달기