char型の構造体
Info.year = 7
Info.month = 9
Info.day = 6
各1バイトに入っている値(日付情報)を
CString型の値
csStr = 070906と比較しようとしています。
①char型の構造体を一つのint型変数に格納
②CString型の変数をint型に変換
③お互いを比較
と考えているのですが、どうにもやり方がわかりません。
サイトをいろいろ検索してみましたが、情報が多すぎて自分に当てはまる方法がどれな
のか分かりませんでした。
どなたか教えていただけますでしょうか?
またもっと簡単な方法がありましたら教えてください。
ちなみに考えたソースを下に書きますがうまく行きませんでした。
iTemp が0になってしまいます。
int iTemp;
iTemp = atoi(&Info.year) * 10000;
iTemp += atoi(&Info.month) * 100;
iTemp += atoi(&Info.day);
if (iTemp > atoi(CString)){
}
Info.yearが7なら、atoi(Info.year)でいいんじゃないの。
回答ありがとうございます。
その方法ですと以下のエラーが出てしまいます。
error C2664: 'atoi' : 1 番目の引数を 'char' から 'const char *' に変換できませ
ん。(新しい機能 ; ヘルプを参照)
> char型の構造体
と書いてあるので、たぶん
> Info.year = 7
> Info.month = 9
> Info.day = 6
が間違いで
Info.year = '7'
Info.month = '9'
Info.day = '6'
何じゃないですか?("でくくられた文字列ではなく、''でくくった文字)
ちょっと安易ですが、
> iTemp = atoi(&Info.year) * 10000;
の代わりに
iTemp = (Info.year - '0') * 10000;
で可能です(month, dayも同様)。
すいません、書き方が悪かったです。。
char型の構造体
Info.year = 7
Info.month = 9
Info.day = 6
csStr = 070906
の部分はソースではなく別の所で値を入れられた構造体なりデータを表現しただけで
す。
問題なのは
iTemp = atoi(&Info.year) * 10000;
iTemp += atoi(&Info.month) * 100;
iTemp += atoi(&Info.day);
if (iTemp > atoi(CString)){
}
の部分で、なぜかiTempの値が0になってしまいます。
その為したの比較もうまく行きません。
ソースの部分の添削をお願いします。。
iTemp = (Info.year - '0') * 10000;
の方法明日試してみます。
回答ありがとうございました!
char型って変だとは思っていたんだよなー
だって2127年12月31日が表現できないじゃん。
つーか2128年1月1日問題が発生する。
だからわざわざInfo.yearが7ならっていったのに
こういう言い方だとスルーされる率高いね。
char型なら7なわけねーだろ
ふざけてんのか
ってきつくいったら売り言葉に買い言葉になっちゃうし。
Info.yearが7なら
iTemp = Info.year * 10000;
送信したら既に回答あった。
ちょっと嫌みっぽい書き込みしたけど気にすんなよ。
冗談じゃなくてマジで
Info.month = '9'とかじゃ10月どうすんのよ!
ちゃんとデータ構造は仕様を厳密に決め誤解のないように表現しましょう。
>冗談じゃなくてマジで
>Info.month = '9'とかじゃ10月どうすんのよ!
すいません。間違えました!
Info.year = 7
Info.month = 9
Info.day = 6
の部分は各2バイトです。
ですので上記の情報なら1桁の場合は0を足して
070906という事になります。
intですので70906になればいいのかな。ダブルコーテーションで囲ったのは特に意味が
ありません。そこの部分はソースでは無いので、、誤解をあたえたのでしたら謝りま
す。
iTemp = Info.year * 10000;
の方法明日試してみます。
回答ありがとうございました。
もしかして
> Info.year = '7'
でもなくて
Info.year = 7
かな?
それならば atoi する必要ないじゃん。
構造体のcharは文字列、文字コード、それとも単なるバイトデータ?
wclrp ( 'o')さんが言っているとおり
> ちゃんとデータ構造は仕様を厳密に決め誤解のないように表現しましょう。
構造体の部分は自分で作成していない為すいません正確にはわかりません。
明日確認して報告します。
> Info.year = 7
> Info.month = 9
> Info.day = 6
> の部分は各2バイトです。
各2バイト?
どういうデータが入っているか分からなくなってきた。
ということで、
maru 2007/09/06(木) 22:43:06
の発言は撤回します。
構造体の定義の部分は
typedef struct _alm_details{
char year;
char month;
char day;
} S_ALM_DETAILS,* PS_ALM_DETAILS;
でした。
2バイトと書いたのは間違いで、ただの文字という事ですよね?
Info.year に 0x07が入っている状態で
iTemp = Info.year * 10000;
とすると 0x11170
iTemp = (Info.year - '0') * 10000;
とすると 0xfff9be70となってしまいます。
数字の70000にしたいのですが・・
文字をそのまま計算しているから駄目なんだと思うのですが、何がなんだかわからなく
なってきました。。
>Info.year に 0x07が入っている状態で
>iTemp = Info.year * 10000;
>とすると 0x11170
0x11170(16進数) = 70000(10進数)だけど?
そもそも各メンバーのcharに何が入っているのか。
文字なのか、数字なのか ご自身ではっきりしていないのでは?
> 2バイトと書いたのは間違いで、ただの文字という事ですよね?
ただの文字ですらない。
8bit整数じゃないの?
# ひょっとしたらBCDかもしんね^^;
すいません。
自分でもはっきり分かっていません。
この構造体を宣言している部分、値をセットしている部分は他の人が作成したものでし
て。。
Info.yearの値をデバッガのウォッチウィンドウで見ると、「0x07 '□'」のように表示
されます。。
何なのでしょうか。。