0

だから私は最近Cでかなり錆びています。

char* 配列内に文字列のリストを作成する方法は知っていますが、リストを再マップして、最初の文字列のインデックスを 1、2 番目の文字列のインデックスを 5 にする方法はありますか?

これが私がそれを使用しようとしている方法です...

myclockTimeStruct.RTC_H12AM/PM 値を 0x00 または 0x40 (STM32f4xx チップを使用)として返すクロック プログラムを構造内に持っています。変数がありchar* AM_PM= {"AM","PM"};ます。

現在行っている if ステートメントは実行したくありません。理想的には、コードを読み取るときに PM を 0x40 の位置に再インデックスして、よりストリーム化されたラインになるようにしたいと考えています。

できることは覚えているようですが、どこで見たのか思い出せません。私が考えていることとは違うのではないでしょうか?いつでも括弧内に 63 個のコンマを入れることができると思いますが、別の方法で行うことができると思いました。

4

3 に答える 3

2

これがあなたが求めていることだと思います。他の提案も良いです。

char * AM_PM[0x40+1] = { "AM", [0x40] = "PM" };
于 2013-11-09T20:09:32.297 に答える
1

あなたが使用することができます

AM_PM[rtc_h12 == 0x40 ? 1 : 0]

(これは短く書き直すことができますが、IMO では読みにくくなります。)

于 2013-11-09T20:07:02.360 に答える
1

することをお勧めします

AM_PM[rtc_h12 >> 6]

つまり、元の 2 要素配列にインデックスを付けることができる or を指定0x40して0、効率的に除算します。1

またはそれrtc_h12以外の何かを返す可能性がある疑いがある場合は、次のことができます00x40

AM_PM[(rtc_h12 << 6) & 1]

下位ビットをマスキングすることで、0またはのみを取得することが保証されます1

于 2013-11-09T20:22:56.153 に答える