前提・実現したいこと
共用体を用いて、エンディアン変換行う関数を作ろうとしたところうまくいかない状態です。
実行結果
別のスクリプト(FORTRAN)でこの関数を呼び出して、実行したところ以下のような数値がでました。
floatの値には123.456のような数値が入っています。
-1.47179405E+09
該当のソースコード
c
1#include <stdio.h> 2#include <stdlib.h> 3 4union fl { 5 char cvar[4]; 6 float fvar; 7}; 8 9float convert_endian_(float *x) 10{ 11 union fl uni_fl; 12 //変換した後の数値 13 float fvar_ce; 14 15 uni_fl.fvar=*x; 16 //ビックからリトルへの変換 17 //float型で取り込む 18 fvar_ce=uni_fl.cvar[0] << 24 | uni_fl.cvar[1] << 16 | uni_fl.cvar[2] << 8 | uni_fl.cvar[3] << 0; 19 return fvar_ce; 20}
FORTRAN
1 REAL CONVERT_ENDIAN,X,Y 2 X=123.456 3 Y=CONVERT_ENDIAN(X) 4 5 WRITE(6,*) Y 6 7 STOP 8 END
試したこと
共用体の使い方やエンディアン変換について調べましたが該当する記事が見つからず、どのようにすれば良いかわからない状態です。
なにかヒントでも良いので、ご教授いただければ幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
使用OS:macOS