例えばdouble型で 1000をunsigend char[5]{0,0,0x03,0xE8}に変換する
方法がわかりません。
又unsigend char[5]{0,0,0x03,0xE8}をdoubleの1000に変換する方法
が分かりません。
分かる人がいましたら教えてください。
宜しくお願いします。
質問。小数点以下はどう扱うのでしょうか? また負数は?
1000.1 を unsigned char[5] に変換するとどうなるのでしょう?
-1000はどうでしょう?
そこらへんがクリアになってないので答えられません。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200604/06040024.txt
こっちの続きみたいですね。
double型で1000がメモリイメージで0x03や0xe8があるのかどうかは知りませんが…
1000=0x038eって形式で入っているとは限らないので。(浮動小数点型だから)
double型が5バイトという環境もちょっと知らないです。
(例に書かれたモノは5バイト目が未使用なようですが)
stdio.hをインクルードしていいなら、sprintf()を使って、
自分で文字列から、数値に変換すればいいんじゃないですか?
質問を確認します。
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;
jooさん参考になりました。
ありがとうございました。
わしらの疑問をほっといて唐突に[[解決]]されてもなぁ…
ツイート | ![]() |