C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■86242 / )  Re[2]: バイナリデータを読んで、日付などの形にする方法について
□投稿者/ へなちょこ (6回)-(2018/01/03(Wed) 14:06:11)
ご回答ありがとうございます!

> どういった状況・目的で取り組んでいるのかわかりませんが、C 言語のデータ構造の読み方を独学でやりきるのは難しいでしょうし、質問が続いてしまうので、近場に頼れる人がいるならその人に教えてもらった方が良いと思いますよ。

おっしゃる通りです。近場に頼れる人がいれば、聞くことができるのですが、残念ながら該当する人がいない状態です.....。そのため、こちらで助けを求めさせていただいている次第です....
「C 言語のデータ構造の読み方」が分かっていないことが分かりました。ありがとうございます。


> プログラミングは適当に試してもうまくいきません。
> このコードでなぜそれができるのか? どういった仕組みなのか? を考察することも必要ですし、時にはいろいろと調べまくってキーワードをなんとか見つけるということも必要かと思います。
> (VB.NET だけでうまく見つからないなら、C# 側のキーワードでも探してみて、どういったメソッドが使えそうか、探ってみるとかも必要かもしれませんが…)

おっしゃるとおりです。
どうやら調べて出てきた情報が理解できないレベルなのが問題だと思います....
使えそうなメソッドの情報が見つかっても、それをどう使えばよいのかで悩んでしまうので....
ただ、今までに教えて頂いたことが元になって、色々と学ぶことができました。

> よって、2 バイトで表現される数値は、以下のような計算で求まります。
>
> Dim result As Integer = CInt(1 バイト目) + CInt(2 バイト目) * 256

ご丁寧に説明していただき、ありがとうございます!
教えて頂いた通りに試したところ、目的のデータが取得できました!ありがとうございます!

> 特にアラインメントなどもなく、8 バイトの連続したデータであることが正しいのであれば、BinaryReader.ReadInt64 で Long 型として読み込み、DateTime.FromFileTime メソッドで DateTime 型に変換すれば楽でしょうね。

こちらもご教授ありがとうございます!
記載して頂いた情報を元に検索をして調べたのですが、「BinaryReader.ReadInt64 で Long 型として読み込み」というのは出来て、以下のような値を入手できるのは確認しました。

バイナリデータ
50 EC 1D 47 C4 70 D2 01 24

Long型で取得した値
131291327456210000

最終的に表示したい実際の日時
2017/1/17 13:19:05

このLong型で取得した値を「DateTime.FromFileTime メソッドで DateTime 型に変換」でよいと思うのですが、以下のサイトの「使用例」をそのまま使うと、変な表示になってしまいます。

https://msdn.microsoft.com/ja-jp/library/system.datetime.fromfiletime(v=vs.110).aspx

サイトの「使用例」のFunction FileAgeに、引数としてLong型で取得した値をしていすると、以下の結果がでます。
出力結果→「350.15:21:09.8697527」

すみませんが、どうすれば「最終的に表示したい実際の日時」の形にできるか教えて頂けないでしょうか?

返信 編集キー/


管理者用

- Child Tree -