float ⇔ char 間のやりとりは? – プログラミング – Home

float ⇔ char 間のやりとり...
 
通知
すべてクリア

float ⇔ char 間のやりとりは?


TA
 TA
(@TA)
ゲスト
結合: 24年前
投稿: 4
Topic starter  

float型の変数を文字型にし、
また文字型の変数をfloat型にする
便利な命令文は無いでしょうか?

小数点を含む数値を、ファイルに一旦しまっておいて、
また、おりを見て、その値を引き出したいのです。


引用解決済
トピックタグ
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

小数→文字列
  sprintf(), fprintf()など。

文字列→小数
  sscanf(), atof()など。

>小数点を含む数値を、ファイルに一旦しまっておいて
数値のまま、バイナリ保存するという手も。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

まず、開発環境をきちんと提示してください。
MFCの使用の有無も。

下の「使用上の注意」のリンク先を熟読して足りない情報を補ってください。

C言語やC++言語では命令文ではなく、関数です。
標準で付いてくる関数は標準関数と呼ばれています。
この辺は入門書にも書いてありそうな気がします。

標準関数を片っ端から調べていけば、そのものずばり出なくても代替が利く関数が
見つかると思います。この辺の関数は入門書にも出てくると思いますので。

ちなみにVC++の入門書ではC++言語やC言語の入門書にはなりません。
C++言語やC言語の入門書を一冊は持っていた方が良いです。


返信引用
yomi
 yomi
(@yomi)
ゲスト
結合: 22年前
投稿: 17
 

atofってdoubleにするんじゃなかった?
間違えていたらごめんなさい。


返信引用
yomi
 yomi
(@yomi)
ゲスト
結合: 22年前
投稿: 17
 

つまんない事書いちゃった。
とりあえずサンプル

floatから文字列
char buf[15];
float fl = 1.7320534f;
sprintf(buffer + j, %f, fl);

文字列からfloat
char cstr[] = 13234.0456;
float fl;
sscanf(cstr, %f, &fl);

文字列からfloatは
こっちのほうが楽かも
fl = (float)atof(cstr);

PATIOさんが書いているように入門書には必ず記載されていると思う。


返信引用
TA
 TA
(@TA)
ゲスト
結合: 24年前
投稿: 4
Topic starter  

皆さん いろいろありがとうございます。
開発環境はVC++6です。

ところで、Tibさんの言われるように
fopen時、アクセスモードを、バイナリ-ライトの
wbr+にして、

float Ave;
int PChar;

if ((fc = fopen(CepDic.doc,wrb+)) == NULL
{
printf(file open error!! \n);
exit(1);
}
という形でファイルをオープンしておいて、
if ((PChar = fput(Ave,fc)) == EOF)
{
printf(file open error!! \n);
exit(1);
}
をループさせる形で書きこんだのですが、
何故か、書かれたファイルを、ワードなりワードパッドなりで開いて見てみても、
全部、書かれている箇所は、何か書かれたのには間違いはないのですが、
数字や少数ではなくて、
点(・・・・)
でしか表示されていないのですが。
ワード側での表示のオプションがあるのでしょうか?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

それは、バイナリモードだから。
バイナリの浮動小数点データをワードで参照して読める人はいないと思う。(多分)
ワードとかワードパッドと言うのはあくまでも文字で記録されたデータを見るための
物です。バイナリデータはバイナリエディタとかVCのファイルを開くでバイナリを
選択して開くとかしないと見れません。
ただ、言語が浮動小数点データをどのようにメモリ上に持っているかがわかっていないと
見ても正しいデータが入っているかはわからないと思いますよ。
書き出した内容を読み込んでみて書きこみ内容と一致しているかどうかで確認した方が
効率がいいと思います。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

余計なお世話とは思いますが、
この辺のデータとは何かという部分はしっかり理解された方がいいと思います。
勘違いしたまま突き進むと後から解析が難しい不具合を作りこみかねませんから。

この辺の内容をわかりやすく解説した本を私は知らないのですけれど、
どなたかご存知の方がいらっしゃったら教えてあげてください。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ああっ、ごみが増えていく。

バイナリモードだからと言うのは正確ではないですね。
バイナリデータをファイルに書き出したからと言うのが正解です。
テキストモードでバイナリデータを書き出すと改行コードと同じ値の
データが変換されてしまうのでバイナリデータの書出しには
バイナリモードを使う必要が有ります。

さっきも書いていますが、テキストデータというのはバイナリデータの
特殊な例です。テキストデータは基本的に文字コードと改行等の一部の制御データのみ
で構成されます。従って、ワード等で参照可能です。
バイナリデータは文字コードに限らないバイナリ値全般が対象ですから
たまたま文字コードに一致した部分はワード等でも参照できますが、
基本的に正常な状態で参照する事は出来ないと考えるべきです。
その昔はdumpプログラムで16進ダンプの形で参照してました。

この辺はプログラムと言うより、コンピュータとはの系列の話なんですかねぇ。
言語の入門書にもあってもよさそうに思いますけれど。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました