• 締切済み

テキストファイルに書き出したdecimalデータを再計算したい

00000000 00000000 00000000 00000016 00000000 00000000 00000000 00000044 00000000 00000000 00000000 00000006 00000000 00000000 00000000 00000065 …以下、4*200=800バイト分続きます。 上記のようなbinaryデータ⇒decimalデータと変換した10進数を更に、 ・1行目*1677216 ・2行目*65536 ・3行目*256 ・4行目はそのまま としたいのですが、どなたかC言語で分かる方がいらっしゃいましたらご助言頂きたいと思っております。 宜しくお願い致します。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

「1バイト」が ffffffff だったり ffffffe8 だったりする処理系がないとは言えないですけどね>#5.... なぜか質問者が処理系を書いてくれないからなんともいえない.

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.5

>15バイト目:ffffffff >16バイト目:ffffffff >17バイト目:ffffffe8 1「バイト」がffffffffだったりffffffe8だったりするのですか? 私が知っているところでは、ffffffffやffffffe8は4バイト(32ビット)です。 勘違いしていたら、すみません。

すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.4

>15バイト目:ffffffff >16バイト目:ffffffff >17バイト目:ffffffe8 >18バイト目:ffffffd9 これが、 >00000000 >00000000 >00000000 >00000016 こうなるのでしょうか? 法則がさっぱりわかりませんが。 >15バイト目:ffffffff >16バイト目:ffffffff >17バイト目:ffffffe8 >18バイト目:ffffffd9 これを変換するなら、 ffffe8d9になるので、 4294961369(符号無し) -5927(符号あり) だと思うのですが。

すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.3

>00000044 これは、  1バイト目:X'00'  2バイト目:X'00'  3バイト目:X'00'  4バイト目:X'44' を表わしているのですか?そして、十進数に変換した結果としては 4 * 16 + 4 = 68(ろくじゅうはち) がほしいのですか?

noname#70694
質問者

補足

>asuncionさん 元々はこのような16進数データでした。 (先頭固定長14バイトは省きます) 15バイト目:ffffffff 16バイト目:ffffffff 17バイト目:ffffffe8 18バイト目:ffffffd9 19バイト目:ffffffff 20バイト目:ffffffff 21バイト目:ffffffff 22バイト目:fffffff6 23バイト目:00 24バイト目:00 25バイト目:00 26バイト目:1f 27バイト目:ffffffff 28バイト目:ffffffff 29バイト目:ffffffff 30バイト目:ffffffc7 …以下、800バイトまで同様の数列。 上記をdecimalデータ(10進数)に変換することには成功しています。 先頭の数字列が1バイト目を現すのではなく、上記のような数列を成しています。 ここですと、欲しい結果は、 ・16行目*1677216 + 17行目*65536 + 18行目*256 + 19行目 ・20行目*1677216 + 21行目*65536 + 22行目*256 + 23行目 以下、800バイト目まで続く となります。 配列を利用して、行を特定して読み出せることが出来れば… ちなみに出力結果は全てテキストに書き出しています。

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

No.1訂正 >8*4*200=1600Byte ではなく。 8*4*200=6400Byteですね。失礼。 おまけで、 改行コードが「CR」のみなら(8+1)*4*200 改行コードが「CR+LF」なら(8+2)*4*200 さらに、質問のように4行ごとに一行空白行が入るなら 上記の式に「+(1*200)」か「+(2*200)」分ファイルサイズは増えることになります。

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

それで、わからない箇所はどこになりますか? ・データの読み込み ・文字列の数値の変換 ・その他 ファイル出力ができているのですから、読み込み関数は知っていると判断します。 読み込んだ文字列を数値にするには、atoi()やatol()といった関数を利用します。 桁が大きいので、今回のような場合ならatol()を使用した方がいいでしょう。 処理としては、一行ずつ読み込み、文字列を数値に変換、計算を繰り返していくことになります。 ちなみに、 >00000065 の一行が、半角数字8文字であらわされるのなら、 >4*200=800バイト ではなく、 8*4*200=1600Byteとなります(厳密にはさらに改行コード分が増えるのでさいずはおおきくなります)

noname#70694
質問者

補足

>それで、わからない箇所はどこになりますか? 文字列数値変換部分です。

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