char型 と CString型の数字を比較したい – プログラミング – Home

char型 と CString型の数字...
 
通知
すべてクリア

[解決済] char型 と CString型の数字を比較したい

固定ページ 1 / 3

shang
 shang
(@shang)
ゲスト
結合: 17年前
投稿: 23
Topic starter  

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)){
}


引用未解決
トピックタグ
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

Info.yearが7なら、atoi(Info.year)でいいんじゃないの。


返信引用
shang
 shang
(@shang)
ゲスト
結合: 17年前
投稿: 23
Topic starter  

回答ありがとうございます。
その方法ですと以下のエラーが出てしまいます。

error C2664: 'atoi' : 1 番目の引数を 'char' から 'const char *' に変換できませ
ん。(新しい機能 ; ヘルプを参照)


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> 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も同様)。


返信引用
shang
 shang
(@shang)
ゲスト
結合: 17年前
投稿: 23
Topic starter  

すいません、書き方が悪かったです。。

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;
の方法明日試してみます。
回答ありがとうございました!


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

char型って変だとは思っていたんだよなー
だって2127年12月31日が表現できないじゃん。

つーか2128年1月1日問題が発生する。

だからわざわざInfo.yearが7ならっていったのに
こういう言い方だとスルーされる率高いね。

char型なら7なわけねーだろ
ふざけてんのか
ってきつくいったら売り言葉に買い言葉になっちゃうし。

Info.yearが7なら
iTemp = Info.year * 10000;


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

送信したら既に回答あった。

ちょっと嫌みっぽい書き込みしたけど気にすんなよ。

冗談じゃなくてマジで
Info.month = '9'とかじゃ10月どうすんのよ!

ちゃんとデータ構造は仕様を厳密に決め誤解のないように表現しましょう。


返信引用
shang
 shang
(@shang)
ゲスト
結合: 17年前
投稿: 23
Topic starter  

>冗談じゃなくてマジで
>Info.month = '9'とかじゃ10月どうすんのよ!

すいません。間違えました!
Info.year = 7
Info.month = 9
Info.day = 6
の部分は各2バイトです。
ですので上記の情報なら1桁の場合は0を足して
070906という事になります。
intですので70906になればいいのかな。ダブルコーテーションで囲ったのは特に意味が
ありません。そこの部分はソースでは無いので、、誤解をあたえたのでしたら謝りま
す。

iTemp = Info.year * 10000;
の方法明日試してみます。
回答ありがとうございました。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

もしかして
> Info.year = '7'
でもなくて
Info.year = 7
かな?

それならば atoi する必要ないじゃん。

構造体のcharは文字列、文字コード、それとも単なるバイトデータ?
wclrp ( 'o')さんが言っているとおり
> ちゃんとデータ構造は仕様を厳密に決め誤解のないように表現しましょう。


返信引用
shang
 shang
(@shang)
ゲスト
結合: 17年前
投稿: 23
Topic starter  

構造体の部分は自分で作成していない為すいません正確にはわかりません。
明日確認して報告します。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

> Info.year = 7
> Info.month = 9
> Info.day = 6
> の部分は各2バイトです。
各2バイト?
どういうデータが入っているか分からなくなってきた。
ということで、
maru 2007/09/06(木) 22:43:06
の発言は撤回します。


返信引用
shang
 shang
(@shang)
ゲスト
結合: 17年前
投稿: 23
Topic starter  

構造体の定義の部分は

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にしたいのですが・・

文字をそのまま計算しているから駄目なんだと思うのですが、何がなんだかわからなく
なってきました。。


返信引用
…。
 …。
(@…。)
ゲスト
結合: 17年前
投稿: 2
 

>Info.year に 0x07が入っている状態で
>iTemp = Info.year * 10000;
>とすると 0x11170
0x11170(16進数) = 70000(10進数)だけど?

そもそも各メンバーのcharに何が入っているのか。
文字なのか、数字なのか ご自身ではっきりしていないのでは?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> 2バイトと書いたのは間違いで、ただの文字という事ですよね?

ただの文字ですらない。
8bit整数じゃないの?

# ひょっとしたらBCDかもしんね^^;


返信引用
shang
 shang
(@shang)
ゲスト
結合: 17年前
投稿: 23
Topic starter  

すいません。
自分でもはっきり分かっていません。
この構造体を宣言している部分、値をセットしている部分は他の人が作成したものでし
て。。

Info.yearの値をデバッガのウォッチウィンドウで見ると、「0x07 '□'」のように表示
されます。。
何なのでしょうか。。


返信引用
固定ページ 1 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

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