double値を16進バイナリに変換する方法

解決


ろべ  2006-04-12 18:49:59  No: 61201  IP: 192.*.*.*

例えばdouble型で 1000をunsigend char[5]{0,0,0x03,0xE8}に変換する
方法がわかりません。
又unsigend char[5]{0,0,0x03,0xE8}をdoubleの1000に変換する方法
が分かりません。
分かる人がいましたら教えてください。
宜しくお願いします。

編集 削除
επιστημη  2006-04-12 22:04:33  No: 61202  IP: 192.*.*.*

質問。小数点以下はどう扱うのでしょうか?  また負数は?

1000.1 を unsigned char[5] に変換するとどうなるのでしょう?
-1000はどうでしょう?

そこらへんがクリアになってないので答えられません。

編集 削除
瀬戸っぷ  2006-04-12 23:20:53  No: 61203  IP: 192.*.*.*

http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200604/06040024.txt
こっちの続きみたいですね。

double型で1000がメモリイメージで0x03や0xe8があるのかどうかは知りませんが…
1000=0x038eって形式で入っているとは限らないので。(浮動小数点型だから)

double型が5バイトという環境もちょっと知らないです。
(例に書かれたモノは5バイト目が未使用なようですが)

編集 削除
Works  2006-04-13 07:20:23  No: 61204  IP: 192.*.*.*

stdio.hをインクルードしていいなら、sprintf()を使って、
自分で文字列から、数値に変換すればいいんじゃないですか?

編集 削除
joo  2006-04-13 08:38:22  No: 61205  IP: 192.*.*.*

質問を確認します。
doubleから小数点を除いた整数を5バイトの符号なし整数型にしたい。
5バイトの符号なし整数型をdoubleにしたい。

動作確認は一切していません。
doubleが5バイト整数型で表現できない場合のことは考慮しません。
__int64は6バイト以上の整数型とします。
負の値を考慮しません。

5バイトの整数型をdoubleにしたい

__int64 a = (__int64)c[0]*4294967296
 + (__int64)c[1]*16777216
 + (__int64)c[2]*65536
 + (__int64)c[3]*256 + c[4];
double b = a;

doubleから5バイトの整数型にしたい

unsigned __int64 a = (unsigned __int64)b;
c[0] = (a>>32) & 255;
c[1] = (a>>24) & 255;
c[2] = (a>>16) & 255;
c[3] = (a>>8) & 255;
c[4] = a & 255;

編集 削除
ろべ  2006-04-13 17:55:03  No: 61206  IP: 192.*.*.*

jooさん参考になりました。
ありがとうございました。

編集 削除
επιστημη  2006-04-13 23:03:09  No: 61207  IP: 192.*.*.*

わしらの疑問をほっといて唐突に[[解決]]されてもなぁ…

編集 削除