• ベストアンサー

C++でデータの途中から読み込み

w_kiyo123の回答

  • ベストアンサー
  • w_kiyo123
  • ベストアンサー率41% (10/24)
回答No.1

浮動少数floatの型のポインタを作り、ポインタ操作すれば良いと思います。 例えば int* pint; pint = pint + 1; で同じように浮動少数floatでは、 float* pf; pf =+ 1; (float型は12バイトなので、「+1」が12バイト目になる) 後は、ポインタpfの値を変数に代入して取り出すとか、 (float Hensuu = *pf)してください。 間違っていたらごめんなさい。

noname#142252
質問者

お礼

ありがとうございます、ポインタって難しいですね~

関連するQ&A

  • C#のジェネリック

    C++テンプレートの map<int , map< int , float > > a; a[1][1] = 10.0f; float val = a[1][1]; のような事をC#のジェネリックで実現することは可能でしょうか? Dictionary<int, Dictionary<int, float> > b = new Dictionary<int, Dictionary<int, float> >(); b[1][1] = 10.0f; とするとKeyNotExceptionがでます。 Dictionary<int, Dictionary<int, float> > b = new Dictionary<int, Dictionary<int, float> >(); b[1] = new Dictionary<int, float>(); b[1][1] = 10.0f; float val = b[1][1]; とすればできましたが第1キーが異なれば毎回newする必要があります。 キーをペアにする方法も試しました。 public struct Pair{ int x; int y; Pair(int _x, int _y) { x = _x; y = _y; } } Dictionary<Pair, float> c = new Dictionary<Pair, float>(); c[new Pair(1, 1)] = 10.0f; float val = c[new Pair(1, 1)]; しかしこれも無駄が多い気がします・・・ 自分なりにいろいろ試してみましたが他にスマートな方法、 あるいは意見があればお願い致します。

  • バイナリ表示されたデータを小数にかえるには?

    こんばんわ, 今,ある参考書のファイルで 「0000 1010 1010 1010 1010 1010 1010」 という28ビットのバイナリーデータが小数部分をあらわすとき,それをfloat,もしくはdouble型のxに変換せよ。 という,問題があるのですが,1つ1つ上位ビットから0.5×0+0.25×0+・・・とやっていく方法以外にビット演算子やシフト演算子,関数を使用して簡単にできる方法がありましたら教えてください。 ちなみにC言語で作成しています(データはBIGもしくはLITTLEエンディアンどちらの方法でもかまいません)。

  • データフォルダが使えない

    データフォルダのなかのあるフォルダを開こうとすると、「“0x02603397”の命令が“0x00000000”のメモリを参照しました。メモリが“witten”になることができませんでした」って出てきて、使えないんです。どうやったら使えるようになりますか??

  • pythonでバイナリデータを配列に読み込みたい

    python初心者なので、できるだけお手柔らかにお願いします。 pythonのバージョンは2.7.3です。 ===================================================== あるバイナリデータ(test.bin)から、 2バイトずつ100*100の2次元配列に読み込ませたいのですが、 配列への読み込ませ方が分からず悩んでいます。 ===================================================== #### ここから sampleスクリプト(未完) ################ f = open("./test.bin", "rb") x = 100 y = 100 bytesize = 2 data = f.read(bytesize*x*y) array = [[0 for j in range(x)] for i in range(y)] ############################################## 上記の後、arrayの各要素に2byteずつ整数値としてデータを読み込ませたいのですが、 dataからarrayへの受け渡し方法が分からず悩んでいます。 かなり初歩的な質問かも知れませんが、ヒントでもいいので教えて下さい。 また、上記の時点で誤っていることがありましたら ご教授お願いします。

  • Linuxプログラミングについて

     今回初めてLinuxでプログラム作成をしているのですが、どうもわからない 現象がでてしまい困っています。なにが悪いのかわかりません。  めちゃ困っています。助けて下さい。宜しくお願い致します。 (サンプルプログラム) #include <stdio.h> main(){ float float_data ; float float_data1 ; float float_data2 ; float RuisekiSum ; printf("\n") ; float_data = 0.1 ; float_data1 = 1.1 ; float_data2 = 0.01 ; RuisekiSum = float_data1 * float_data2 ; printf(" data → float1( %f. %e )\n" , float_data1,float_data1 ) ; printf(" float2( %f, %e )\n" , float_data2,float_data2 ) ; printf(" RuisekiSum = float_data1 * float_data2\n" ) ; printf(" = 0x%x( %f , %e )\n" , RuisekiSum, RuisekiSum, RuisekiSum ) ; printf("\n") ; exit(0) ; } (実行結果) data → float1( 1.100000. 1.100000e+00 ) float2( 0.010000, 1.000000e-02 ) RuisekiSum = float_data1 * float_data2 = 0x0( 0.000000 , 5.265658e-315 ) 何が悪いのでしょうか? 恥ずかしいながら宜しくお願い致します。

  • C++の配列について

    #include <iostream> using namespace std; int main() { float w[] = {1.2,2.3,3.4,4.5,5.6}; float x[] = {4.8,2.6,1.3,9.1,8.7}; float u = 0.0; int i; for(i=0;i<5;i=i++) { u += w[i] * x[i]; } cout << "u=" << u << "です\n"; return 0; } u=105.83って出たんですが、これは何をしているプログラムなんですか

  • R8C/27のデータフラッシュに保存する

    タイトルのとおり、R8C/27のデータフラッシュにデータを保存する方法に関して 言語はアセンブリです。セクションを設定して、MOV命令で読み書きできるのでしょうか。 ご教授お願い致します。また参考になるサイト等あれば教えてください。

  • SQL文で、重複データの上書きはできますか

    一定範囲(複数)のデータを追加したい場合、 追加する時に、既に既存のデータがある場合は、 データを上書きし、無い時は、データを新規追加 する、ということをやりたいのですが、SQL文で、 そのような命令はあるでしょうか。 Excelで打ち込んだ、数件のデータを、データベース 用の別のExcelシートに一気に保存したい時に、 この問題が生じてしまいます。 (INSERT命令のみだと、すべて新規となるので、 重複データができてしまい、何が新規でなにが新規 でないかをいちいち区別し、処理を分けるのも 困難です)。 非常に初歩的かもしれませんが、お願いします(ちなみに、ExcelVBAで、SQLを使おうと思っています)。

  • Windows7とdirectx 9.0c

    Windows VistaからWindows7にパソコンの引越しをしています。Vistaは、NECのVALUESTAR, 7は、DELLのALIENWARE X51です。 AOSの 「ファイナルパソコン引越し11+」を使ってソフトも含めて引越しをしました。 その中にゲームソフトもあるのですが、一部の3Dゲームが「、「コンピューターにd3dx9-31.dllがないためプログラムを開始できません。この問題を解決するにはプログラムを再インスト-ルしてみてください」というエラーメッセージが出て、起動できません。それら以外は起動できました。 試しにゲームを直接インストールしてみましたが、同じでした。ゲームは7に対応しています。 ゲームソフトのサポートページを見て、ようやくdirectx の問題だということがわかりました。7に入っているのが11.0なのですが、それらのゲームは9.0c が必要だったのです。「10.0以降であれば、それとは別にdirectx 9.0cの追加コンポーネントが必要」とありました。 質問は、「directx 9.0cの追加コンポーネント」とは何なのでしょう。9.0cをインストールしたら、11.0は9.0cに置き換わってしまうんですよね。11.0をそのままに、9.0cもインストールする方法があるのでしょうか。 そして、7で仮に11.0が9.0cに置き換わってしまった場合、何かまずいことが起きるかも心配です。 初歩的な質問で申し訳ありませんが、詳しい方、どなたか教えていただけないでしょうか。よろしくお願いいたします。

  • c言語 関数宣言

    c言語で書かれたプログラムを見ていると、ちょっとわからない関数宣言がでてきました。 関数宣言をしているのだと思うのですが、これはいったいどういうことなのでしょうか。 grad_pf(x, a, yfit, dyda, ma) float x; float a[]; float *yfit; float dyda[]; int ma; {            処理・・・・・・・・ } 中括弧の前で宣言された変数はどういったものなのでしょうか。 よろしくお願いいたします。