1

double をリトルエンディアンの 16 進文字列に変換するか、特定の型の long に直接変換しようとしています (以下を参照)。

以前は、定義済みのリトル エンディアンの 16 進文字列を次のように long に変換していました。

string hcommand = "01AC"; char * p; long n = strtol(hcommand.c_str(), &p, 16); これは希望どおりに機能しました。

現在、double をリトル エンディアン (最下位バイトが最初) 形式の 16 進数文字列に変換するか (上記のコードの hcommand を置き換える)、または double から同じ型の long に直接変換しようとしています。

これを試してみましたが、上記と同じように処理されません。

double myDouble = 44033; long hcommand = (long)_byteswap_ulong((int)myDouble);

ありがとうございました。

4

2 に答える 2

0

問題は、4 バイトのうち 2 バイトしか見ていないことにあると思われます。

最初の例では、値 0xAC01 (428) を取得します。

2 番目の例でmyDoubleは、0x01AC0000 を 0x0000AC01 (28049408) に変換します。

これの 1 つの単語だけが必要な場合は、 を使用します_byteswap_ushort((unsigned short)myDouble)

于 2012-09-05T23:51:18.763 に答える
0

_byteswap_ulong を _byteswap_ushort に変換すると、結果が同じになることがわかりました。

于 2012-09-05T23:51:08.030 に答える