おそらく私の質問はばかげていますが、char値をintに変換して元に戻すのに問題があります。
問題は、Access DB によって取得された char 値を復号化しようとしていることです。
これが私のコードです
char chrVal = 'M';
int intVal = (int)chrVal; // Output 77 'M'
// Now trying to encrypt using XOR
int encIntVal = intVal ^ 203; // Output 134 '†'
// Convert back
char correct = (char)(encIntVal ^ 203); // Output 'M' - CORRECT
char wrong = (char)('†' ^ 203); // Output WRONG value
実際には、暗号化 XOR から得られた int 値を使用すると、正しい結果 ('M') が得られます。代わりに、encrypt XOR (DB にあるもの) からの char の結果を使用すると、間違った結果 (読み取り不能な文字) が得られます。
さまざまなエンコーディングを使用しようとしましたが、どこに問題があるのか わかりません。
なにか提案を?
アップデート
(int)Convert.ToChar(dr["Sex"]) は 134 ではなく 8224 を返すため、おそらく問題は ADO.NET OleDbDataReader にあることがわかりましたが、まだ解決策を見つけることができません。
解決した
文字「†」は、Windows 1252 コード ページにあります。したがって、正しいエンコーディングで byte[] を取得します。
byte[] byteVal = Encoding.GetEncoding(1252).GetBytes(dr["Sex"])
char correct = (char)(byteVal[0] ^ 203); // Output 'M'
ありがとう