2016-12-30 67 views
-3

我有一个特定字符'š',我需要它在wchar_t类型中的表示形式,表示一个UTF-16 Unicode字符,所以我可以将它作为wParam和WM_CHAR消息发送给Winapi SendMessage函数。这个字符的两个字节表示是字节[] {97,1}将特定字符转换为int

我需要的int是154.但是对于下面的代码,我总是得到353.任何想法如何获得154而不是353?

char ch = 'š'; 
byte[] charByte = Encoding.Unicode.GetBytes(ch); // reults in byte[] { 97, 1 } 

int charInt = BitConverter.ToInt32(charCode, 0); // results in 353, but 154 is correct 
+0

'(int)'š''似乎也返回353。所以'(int)char.ConvertFromUtf32((int)'''[0]'。不完全确定如何,为什么和你想要完成什么。你是否尝试过使用'353'并看看你会得到什么?可能工作。 – devRicher

+0

为什么它应该返回154? – CodingYoshi

+0

使用'Encoding'和'BitConverter'也会返回353.为什么你需要特别的154? – Abion47

回答

2

也许,你正在寻找的Win-1252(不统一,但ANSI代码页)或类似编码:

byte result = Encoding.GetEncoding(1252).GetBytes('š'.ToString())[0]; 

// 154 
Console.Write(result); 

请,通知,你应该解码string'š'.ToString())而不是char

+0

这是1250,但是,是的,你是对的。谢谢。 –

2

353是UTF-16中该字符的正确值。 154的值是针对Windows ANSI代码页中的一个。