簡體   English   中英

在int和char之間轉換錯誤並返回C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM