2

Visual Studio で 64 ビット double を取得し、それを80 ビット拡張 (IEEE-754) doubleに変換するコードを探しています。結果は 10 バイト配列に格納する必要があります (リトルエンディアン形式だと思います)。その理由は、Borland c++ で作成されたプログラムに 80 ビット double を送信し、この double を要求する必要があるためです。しかし、私が試したこと(基本的に、それぞれ52ビットと11ビットの仮数と指数を取り、15ビットで16383オフセットになるように指数を変換し、仮数を64ビットにパディングする)を試みたので、これを行う方法がわかりません。うまくいかないようです。この質問の逆です。

inline void ConvertDblToLongDbl(double dbl, unsigned char aCh[10])
{
__int64 ull= *(__int64*)(&dbl);
    *(unsigned short*)&aCh[8]= (unsigned short)((ull>>52&0x7FF+15360)|  //     exponent, from 11 bits to 15 bits
        ((ull&(__int64)1<<63)?0x8000:0));   // sign, the 16th bit
    ull= ull&0xFFFFFFFFFFFFF;
    *(__int64*)&aCh[0]= ull|0x8000000000000000;
}

ありがとう、
M

4

2 に答える 2

3

インラインアセンブリは、最も簡単で最速の方法です。このような:

void ConvertDoubleToLongDouble(double value, unsigned char result[10]) {
    __asm {
        fld value;
        mov ebx, result;
        fstp tbyte ptr [ebx];
    }
}
于 2012-04-26T07:56:27.187 に答える