- - PR -
C#とPHP4での文字コードから文字を取得する動きについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-03 18:59
お世話になります。
ある文字列から1文字ずつ文字コードを取得し、ビットを左シフトさせたものをまた文字に変換する処理 を行なうというあるプログラムがPHPであり、それとまったく同じ動きをC#で実現させたいと思っております。 "eV9zaGlub"という文字列のビット演算した結果を取得する以下のようなプログラムを書いたのです が、出力される文字列がそれぞれで異なってしまいます。 PHP:「ハャr・借・」 C# :「ハャrツリト」 ビット演算した数値から文字を取得する使用がPHPとC#では異なるのでは?と思っているのですが、 なにかお分かりになる事がありましたらよろしくお願い致します。 【PHP】 $strA = "eV9zaGlub"; $strOutput = ""; for ($i=0; $i<strlen($strA); $i++) { $strOutput = $strOutput . chr(ord($strA{$i})<<1); } //$strOutput = ハャr・借・ 【C#】 string strA = "eV9zaGlub"; byte[] bStr = Encoding.ASCII.GetBytes(strA); StringBuilder sb = new StringBuilder(); int shift_data = -1; foreach (byte b in bStr) { shift_data = int.Parse(b.ToString()) << 1; byte[] shift_code = { byte.Parse(shift_data.ToString()) }; char[] shift_char = Encoding.Default.GetChars(shift_code); sb.Append(shift_char); } string strOutput = sb.toString(); //strOutput = ハャrツリト | ||||
|
投稿日時: 2006-02-03 19:18
とりあえず、こうしたら PHP の方と同じ結果になりました。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-02-03 19:39
囚人さん
教えていただいた方法で試したところ、PHPと同じ値で出力されました! ありがとうございます! foreach文の中で文字に変換かけていたのがいけなかったんですね。 [ メッセージ編集済み 編集者: やす 編集日時 2006-02-03 19:46 ] | ||||
|
投稿日時: 2006-02-03 19:54
PHP を知らないので PHP の方の処理がどうなっているのか分からないのですが、結果に漢字が出力されているので、2バイト必要な箇所があります。(Shift_JIS と決めうちした。) 1バイトずつの変換では駄目だったって事ですね。 #ちなみに byte と int の変換で、一度文字列にするのはあまりよろしくないかな。 _________________ 囚人のジレンマな日々 [ メッセージ編集済み 編集者: 囚人 編集日時 2006-02-03 19:55 ] | ||||
|
投稿日時: 2006-02-03 19:56
なるほど。
とても参考になりました。 ありがとうございました。 |
1