プロが教えるわが家の防犯対策術!

double型の値をchar配列に変換する方法はありますか?
例えばdoubleの1.0をcharの配列に{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F}のように

A 回答 (4件)

定数1.0を直接変換する方法は無いので、変数に入れてから「それがchar配列だと騙す」しかない。



例1.
union _t {
 double d;
 char c_a[1]; /*先頭要素のアドレスさえ取得できれば良いので要素は1個で良い*/
} data;
int i;
char *p;
data.d = 1.0;
p=data.c_a;
for (i = 0;i < sizeof(double);i++) printf("0x%2.2x ",*p++);
putchar('\n');

例2.
double d = 1.0;
char *p;
p = (char *)&d;
for (i = 0;i < sizeof(double);i++) printf("0x%2.2x ",*p++);
putchar('\n');
    • good
    • 0

追記と訂正。



「doubleの大きさは処理系依存」であり「8」とは限らないので「8」と言う定数は用いないこと。

printfなどでcharを表示する際、%xは負数になるバイトは0xfffffff0のように表示されるので、表示に用いるポインタ変数を
char *p;
ではなく
unsigned char *p;
にするか、表示の際に
printf("0x%2.2x ",(unsigned char)*p++);
のように符号無しにキャストすると良い。

&式の結果はintなので
printf("0x%2.2x ",*p++ & 0xff);
でも良い。
    • good
    • 1

unionを使う。



union {
  double d;
  char c[8];
} u;
u.d = 1.0;
for ( int i = 0 ; i < 8 ; i++ ) printf("%02X",u.c[i]);
    • good
    • 0

ftoa()の様な、変換関数用意するのが簡単かと思いますけど。



http://cppdiary.blog76.fc2.com/blog-entry-7.html

標準ライブラリには無いかなー?
有ったような気もするのですが、ただ、double型そのまま出すのは、多分自前で用意しないと駄目な気はします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!