[英]Wrong converting between int and char and back in C#
可能我的是一個愚蠢的問題,但我有麻煩將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')。 相反,當我使用加密XOR的char結果(這就是我在DB中所擁有的)時,我得到了錯誤的結果(不可讀的字符)。
我試圖使用不同的編碼,但我無法弄清問題在哪里。
有什么建議嗎?
UPDATE
我發現可能問題出在ADO.NET OleDbDataReader上,因為(int)Convert.ToChar(dr [“Sex”])給了我8224而不是134,但我找不到解決方案了。
解決了
字符“†”位於Windows 1252代碼頁中。 所以我得到一個帶有正確編碼的byte []。
byte[] byteVal = Encoding.GetEncoding(1252).GetBytes(dr["Sex"])
char correct = (char)(byteVal[0] ^ 203); // Output 'M'
謝謝
'†'字符可以是前面的字符,不是一個而是許多Unicode值。
我可以創建一個字體,其中'A'不僅僅是65個ASCII值,而是任何值,或者我可以創建一個所有字符都是'A'的字體。
就像你的情況一樣,'†'可以是134,如你所說,8224就像Oded所提到的那樣。
Give more emphasis on ASCII/Unicode values and not on what that value when converted to character looks like.
你的問題是'†'
是8224,而不是134.(@Oded首先提到這個)你可以使用'\'
代替,這是134。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.