|
void __fastcall TForm1::HexStrToDouble(AnsiString xstr, double &d)
{
if (xstr.Length() > 10) {
long long l=xstr.SubString(1,xstr.Length()-8).ToInt();
l = l << 32;
memcpy(&d,&l,8);
l=AnsiString("0x"+xstr.SubString(xstr.Length()-7,8)).ToInt();
memcpy(&d,&l,4);
}else {
long long l=xstr.SubString(1,10).ToInt();
memcpy(&d,&l,8);
}
}
의도가 뭐냐에 따라서 달라지는데요...
double 형의 binary 값이 실제로 이렇다고 하면 위 함수 그대로 쓰면 되고,
AnsiString strTemp = "0x1234567890ABCDEF";
double d;
HexStrToDouble(strTemp,d);
그냥 16진수를 정수형으로 변환한 값을 double 형에 대입하고 싶다면,
함수에서 double 을 long long으로 바꾼 뒤,
double &d -->> long long &d
AnsiString strTemp = "0x1234567890ABCDEF";
double d;
long l;
HexStrToDouble(strTemp,l);
d=l;
이렇게 하시면 됩니다.
생각 나는 대로 만들어 봤는데, 좀 비효율 적인것 같기도하고...
도움이 되셨기를...
자리수를 계산이 틀렸던 부분을 수정했습니다 ㅎㅎ;
조현덕 님이 쓰신 글 :
: 아래 처럼 16진수형태의 문자열을 double로 변환하려 했는데
: 오류가 발생합니다.
: 어떻게 해야 되는지 고수님의 조언이 필요합니다.
:
: AnsiString strTemp = "0x1234567890ABCDEF";
: double dTemp = strTemp.ToDouble() ;
:
:
:
|