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

C++빌더 Q&A
C++Builder Programming Q&A
[71570] Re:AnsiString(Hex)을 double로 변환 방법 좀 알려 주세요.(수정)
빌더초보 [starwagon] 3848 읽음    2014-07-17 20:34
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() ;
:
:
:

+ -

관련 글 리스트
71568 AnsiString(Hex)을 double로 변환 방법 좀 알려 주세요. 조현덕 3471 2014/07/17
71574     Re:AnsiString(Hex)을 double로 변환 방법 좀 알려 주세요. 초초보 3374 2014/07/18
71570     Re:AnsiString(Hex)을 double로 변환 방법 좀 알려 주세요.(수정) 빌더초보 3848 2014/07/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.