2012-02-28 15 views
2

私はここで似たような答えを見ますが、私は何も必要ではありません。制御文字をC#の文字列に追加する方法は?

私は、文字列メッセージが0B制御文字で始まり、トランザクションの終了時に六角1Cと六角0Dの両方を持っているソケットの承認を構築しようとしています。

StringBuilder sb = new StringBuilder(); 
char b = '\u000b'; 
char c = '\u001c'; 
char d = '\u000d'; 
sb.Append(b); 
sb.AppendLine(ackMessage); 
sb.Append("MSA|AA|" + controlID); 
sb.Append(c); 
sb.Append(d); 
string myMessage = sb.ToString(); 

メッセージの受信者がブロックの先頭と最後で制御文字を認識していないため、誤ってコーディングしている場所がわかりません。どんな助けでも大歓迎です。私は正しい形式でコードをここにコピーする方法を知らないので、この質問のフォーマットを許してください;)

ありがとう。

Greg

+0

'myMessage'に制御文字があるかどうかを確認するために関数をデバッグできますか? – Jason

+1

文字列をどのように正確に送信していますか? –

+0

キーコードの16進数の代わりに標準のエスケープコードを使用できます。 '\ b \ r \ n' http://msdn.microsoft.com/en-us/library/aa691087(v=vs.71).aspx – Jason

答えて

4

.NETの文字列と文字はUnicodeです。あなたの消費者はUnicodeを期待していますか? ASCIIバイト配列を代わりに作成/渡す必要があるかもしれませんか?

byte[] unicodeBytes = Encoding.Unicode.GetBytes(ackMessage); 
    var asciiBytes = new List<byte>(ackMessage.Length + 3); 
    asciiBytes.Add(0x0b); 
    asciiBytes.AddRange(Encoding.Convert(Encoding.Unicode, Encoding.ASCII, unicodeBytes)); 
    asciiBytes.AddRange(new byte[] { 0x1c, 0x0d }); 
+0

を参照してください。または、賢明なUTF-16になることができます。あなたはポイントを持っています。文字列の送信方法はわかりません。 –

+0

皆さん、本当にありがとうございます。コンシューマーはASCIIバイト配列も提案しましたが、コントロール文字を追加できなかった理由はまだ分かりませんでした。私は提案されたように関数をデバッグするつもりです。面白いことは、消費者がUnicodeを期待しているかどうかを尋ねるとすぐに私のコードで他の問題に気づいたのです。私はいくつかの数字をクランチしなければならないと私は私の発見を再投稿する。私は数年前からコードを使っていましたが、これは私が外部の会社のために構築した最初のインターフェイスであり、最も簡単なプロジェクトではありません;)すぐ返信いただきありがとうございます。 –

+0

ありがとうございました... ASCIIバイト配列が完璧に動作しました。上記の質問に私が追加した新しい問題が今ではありますが、「切り詰められたソケットメッセージ」という見出しの下に新しいトピックとして投稿します。もう一度ありがとう。 –

関連する問題