4

read関数を使用してTCPソケットからテキスト(ISO-8859-1で知られている)を読み取り、次に基本的な部分文字列を置き換えます。最後に、文字列を同等のGSMに変換したいと思います。

できれば(必ずしもそうとは限りませんが)私は次のようなことをします:

size_t i;
for (i=0; i<size; i++) {
  switch (string[i]) {
    case 65:
      //Convert this character
    case 163:
      //Convert this character (the pound symbol £)
  }
}

私は読みやすさのためにスイッチを好みますが、if-elseステートメントも考慮しました。

これは通常のASCII文字で機能しますが、ISO-8859-1の上部があらゆる種類の問題を引き起こしています。どうやらそれらは複数の文字と見なされます。変換を進める方法についての助けは大歓迎です。

4

1 に答える 1

4

あなたの場合charは署名されているようです。charリテラルを使用して、ASCII127を超えるchar値の符号に関する問題全体を回避できます。

/* ascii: */
case '\000': /* U+0000 - nul */
...    
/* extended ascii: */
case '\200': /* U+0080 - non-printable control character */
...
case '\243': /* U+00A3 - sterling pound */
...
case '\377': /* U+00ff - lower case y with dieresis */

ただし、変換は、配列内のルックアップによって実装する方がおそらく効率的です。

入力の「拡張ASCII」部分が複数の文字で表されている場合、入力は実際にはUTF-8などでエンコードされている可能性があります。

于 2012-10-16T13:03:28.097 に答える