時間 – プログラミング – Home

通知
すべてクリア

[解決済] 時間


カンペー
 カンペー
(@カンペー)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

char date[4];
char time[3];

date[0] = 0x20;
date[1] = 0x03;
date[2] = 0x01;

time[0] = 0x01;
time[1] = 0x01;
time[2] = 0x01;

とあるものを
string 2003/01/01 01:01:01
としたいのですが、どなたかヒントだけでも頂けますか?
宜しくお願いします。


引用未解決
トピックタグ
よねKEN
 よねKEN
(@よねKEN)
ゲスト
結合: 22年前
投稿: 19
 

下記のような感じでどうでしょう。
char型は1バイトを表すデータ型ではなく、
符号なし2バイトで表されるUNICODEの文字を表すデータ型です。
バイトデータを扱うならbyte型を使います。

文字列への変換はString.Formatメソッドを使ってみました。

using System;

class OriginalDateTimeTest{

public static void Main(){
byte[] date = new byte[4];
byte[] time = new byte[3];

date[0] = 0x20;
date[1] = 0x03;
date[2] = 0x01;
date[3] = 0x01;

time[0] = 0x01;
time[1] = 0x01;
time[2] = 0x01;

string s = String.Format({0:X}{1:X2}/{2:X2}/{3:X2} {4:X2}:
{5:X2}:{6:X2},

date[0], date[1], date[2], date[3], time[0], time[1], time[2]);
Console.WriteLine(s);
}

}


返信引用
カンペー
 カンペー
(@カンペー)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

すみません。ちょっと難しいです。
string.formatがよくわかりません。

最終的に
「2003/01/01 01:01:01」
のフォーマットになるのでしょうか?

勝手ですが、例えばchar*でreturnするとすると
どうなるのでしょうか?

宜しくお願いします。


返信引用
よねKEN
 よねKEN
(@よねKEN)
ゲスト
結合: 22年前
投稿: 19
 

> string.formatがよくわかりません。

ヘルプ見てください。書式指定の仕方は違いますが、
基本的な考え方は、C言語のprintf関数と同じです。

{0}~{6}の部分にdate[0]~d[3]、time[0]~time[2]の値が差し込まれます。
{1}を例に挙げるとソースコード中には{1:X2}とありますが、
この内の:より後ろの部分が書式の指定にあたります。
X2はX=16進数、2=精度2桁を意味し、
「0x03(単なる整数の3)」から「(文字列としての)03」に変換されます。

>最終的に
>「2003/01/01 01:01:01」
>のフォーマットになるのでしょうか?

動作確認した上でコンパイルできるソースコードを載せているのに
コンパイルして実行もされていないのでしょうか?自分の目で確認して下さい。

>勝手ですが、例えばchar*でreturnするとすると

いったい何をプログラムされているんでしょうか?
(先のデータ構造もC#的には何のメリットもないように見受けられますし)
CまたはC++のプログラムからの移植か何かですか?
C#ではchar*は通常使いません(というかポインタを使いません)
string型を使います。どうしてもポインタが必要な場合は、
unsafeキーワードを調べてみて下さい。
ポインタを頻繁に使う必要があるなら、VC++.netという選択肢もあります。

そうではなく、外部DLLとのやり取りの都合でchar*が必要だということなら、
DLLに渡すのはstring/StringBuilderクラスでよいです。
DLLの使用のためにextern宣言をするところで、
MarshalAs属性を使って、どういう文字列に変換するかを指定できます。
こちらの場合は、属性やMarshalAsAttribute属性、UnmanagedType列挙体を
ヘルプで調べてみましょう。


返信引用
よねKEN
 よねKEN
(@よねKEN)
ゲスト
結合: 22年前
投稿: 19
 

追記です。

>string.formatがよくわかりません。

C#では大文字小文字を区別しますので、formatメソッドではなくFormatメソッドです。
ここで挙げているFormatメソッドはSystem.Stringクラスの持つstaticメソッドです。
よって、使う側ではstring.FormatまたはString.Formatという名前で使えます。

#string型はC#のプリミティブ型で文字列を表します。
#String型はSystem.Stringクラスです。
#C#のstring型はSystem.Stringのエイリアスなので、
#結果的にstring、Stringはどちらも同じものを指します。


返信引用
カンペー
 カンペー
(@カンペー)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

すみません。実は開発はVC++で行ってます。
VC++ラウンジの方に投稿してみます。
申し訳ありませんでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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