私はZigbeeを使ってKeil C51で書いています。cで配列をフィルタリングする方法は?
Serial_txString0("AT+UCAST:000D6F0000BB769D=StartGreen");
tx_port0(0x0D);
たとえば、私は "+ウカストAT:000D6f0000BB769D = StartGreen" 受信します、私は取得のみ "StartGreen" にそれをフィルタリングします。およそ
私はZigbeeを使ってKeil C51で書いています。cで配列をフィルタリングする方法は?
Serial_txString0("AT+UCAST:000D6F0000BB769D=StartGreen");
tx_port0(0x0D);
たとえば、私は "+ウカストAT:000D6f0000BB769D = StartGreen" 受信します、私は取得のみ "StartGreen" にそれをフィルタリングします。およそ
方法:
char *eq = strrchr(str, '=');
if (eq)
printf("%s\n", eq + 1);
一つの例から、私は本当にあなたがフィルタリングしたいんものに基づいて伝えることができません。このようなもので十分ですか(=
の後の文字列の部分を抽出しますか?
char* filter(char* input) {
int i = 0;
while (input[i] && input[i] != '=') i++;
return &input[i + 1];
}
これは文字列をコピーせず、その右側の部分のみを参照することに注意してください。あなたが実際に<string.h>
でstrcpy
を使用して...
void filter(char* input, char* output) {
int i = 0;
while (input[i] && input[i] != '=') i++;
strcpy(output, &input[i + 1]);
}
...フィルター部分を抽出したい場合。
'while(input [i]!= '=')i ++;'これは文字列に '='文字が含まれていることを前提としています。そうでなければ、ヌル終了を越えて繰り返し、ASCIIコード '='に相当するバイナリgooを検索してコンピュータ全体のメモリをチェックします。代わりにstrchr()を使用するか、ヌル終了をチェックするコードを記述します。 – Lundin
@ Lundinはい、私はそれを認識しましたが、彼は '='がそこにいることを期待していると仮定しました。しかし、私はそれに応じて変更しました。 – Imp
...だから、 '='が文字列に存在しない場合、これは空の文字列を返すでしょう、それはおそらく意味的に正しいでしょう。 – Imp
私は初心者です。すべては何をしていますか? – JiaYuan
@ JiaYuan右端の '='へのポインタを探し、それを表示します。 – cnicutar
@cnicutar @JiaYuan最も右側の '='へのポインタを見つけ、( 'S'に)1ステップ増分してからそれを印刷します。 –