可能我的是一個愚蠢的問題,但我有問題轉換爲一個int值並轉換回一個char值。int和char之間的轉換錯誤,並返回在C#
問題是,我試圖解密由Access數據庫檢索到的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」)。相反,當我使用加密異或(這是我在數據庫中)的char結果時,我得到錯誤的結果(不可讀的字符)。
我試圖使用不同的編碼,但我不知道問題出在哪裏。
有什麼建議嗎?
UPDATE
我發現,很可能問題是與ADO.NET OleDbDataReader,因爲(INT)Convert.ToChar(VDR [ 「性」])給了我8224,而不是134,但我無法找到一個解決方案呢。
解決
字符 '†' 是在Windows 1252代碼頁。所以我用正確的編碼得到一個byte []。
byte[] byteVal = Encoding.GetEncoding(1252).GetBytes(dr["Sex"])
char correct = (char)(byteVal[0]^203); // Output 'M'
感謝
'(INT) '†' == 8224 '。 – Oded
這不是密碼術 – Jodrell
@Jodrell - 它當然是,它只是一個凱撒輪班。 – Jamiec