• ベストアンサー

double型の値をchar配列に変換する方法はありますか?

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

定数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');

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

追記と訂正。 「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); でも良い。

すると、全ての回答が全文表示されます。
  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

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

すると、全ての回答が全文表示されます。
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

ftoa()の様な、変換関数用意するのが簡単かと思いますけど。 http://cppdiary.blog76.fc2.com/blog-entry-7.html 標準ライブラリには無いかなー? 有ったような気もするのですが、ただ、double型そのまま出すのは、多分自前で用意しないと駄目な気はします。

すると、全ての回答が全文表示されます。

関連するQ&A