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

解決


ろべ  2006-04-13 03:49:59  No: 61201

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


επιστημη  2006-04-13 07:04:33  No: 61202

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

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

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


瀬戸っぷ  2006-04-13 08:20:53  No: 61203

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 16:20:23  No: 61204

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


joo  2006-04-13 17:38:22  No: 61205

質問を確認します。
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-14 02:55:03  No: 61206

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


επιστημη  2006-04-14 08:03:09  No: 61207

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加