1

非常に基本的な質問です。aを実際の文字を指すcharaに変換する際に問題が発生しています。char*グーグルは、strcpy、string、sprintf などに関する情報をもたらしました。問題を理解しようと何度も何度も試みた後、私はまだそれを機能させることができません。

recv_msg必要な文字の ASCII 値を含む文字配列があります。文字 (値ではなく) を vector に格納する必要がありますmsg

私が持っているもの:

std::vector<char> msg;
char recv_msg[max_buffer_length];
...
int i;
for (i=0;i<bytes_transferred;i++) {
    msg.push_back(recv_msg[i]);
}
// Problem: when I process my msg I see 49 instead of '1'.

健全性チェックとして次のことを行うと、必要な動作が得られます。つまり、53 (5 の ASCII コード) ではなく、「5」が表示されます。

std::vector<char*> msg;
...
int i;
char *val;
for (i=0;i<bytes_transferred;i++) {
    msg.push_back(val);
}
// No problem: when I process my msg I see '5' instead of 53.

そのため、ASCII コード値 ( char) を文字表現 ( ) に変換する必要がありますchar *。一体どうやってこれを行うのですか?

この段階で問題を解決したいのですが、メッセージを処理するときに ASCII -> 文字変換を行う必要はありません。

4

3 に答える 3

2

Acharは単なる数字です。そのため、53代わりに表示され'5'ている場合は、そのように表示されているためです。

着信メッセージを文字列として保存するように変更できます。たとえば、次のようになります。

std::vector<std::string> msg;
char recv_msg[max_buffer_length];
...
int i;
for (i=0;i<bytes_transferred;i++) {
    msg.push_back(std::string(&recv_msg[i], 1));
}

しかし、実際に単一の文字しかない場合、これは非効率に思えます。別の方法は、文字で「何かをする」ときに文字列に変換することです。たとえば、次のようになります。

std::string str(&msg.back(), 1);

あるいは:

char str[2];
str2[0] = msg.back();
str2[1] = '\0';
于 2013-07-31T19:44:37.170 に答える
1

あなたに基づいて

「(値ではなく) 文字をベクトル msg に格納する必要があります」

以下を試してください。ところで、ASCII53'5'唯一のものであり、recv_msgストアのASCII値のみである可能性があります。

std::vector<char> msg;
char recv_msg[max_buffer_length];
...
int i;
for (i=0;i<bytes_transferred;i++) {
    msg.push_back(recv_msg[i] - '0'); //Subtract 48 from numerals, 
}
于 2013-07-31T19:44:20.823 に答える