繁体   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