C#编号 - > bytes - > string - >第一个符号不等于初始编号

时间:2018-06-05 15:17:49

标签: c#

我有代码。 我想将189'S'作为第一个char,但我有1029'S'作为第一个char。 我无法理解原因。

long longNumber = 189; 
var longNumberSplittedToBytes = BitConverter.GetBytes(longNumber); // as expected 8 bytes array: first is 189
var firstChar = Encoding.Default.GetChars(longNumberSplittedToBytes)[0]; // First Symbol is S but there is char code 1029 not 189!

谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

看起来默认编码为Windows-1251。 字符189(十六进制0xBD)是西里尔语大写字母Dze(Ѕ),unicode +0405

C#在其字符串和字符中使用unicode。十六进制0x0405是十进制的1029。

答案 1 :(得分:1)

您首先将long转换为一系列字节。第一个具有十六进制值BD。

然后,您将该字节数组视为编码字符串,使用您的默认编码,这显然是代码,如https://msdn.microsoft.com/en-us/library/cc195053.aspx

在该代码页的十六进制值“BD”处,您将获得Ѕ,即“Cyrillic Capital Letter Dze”。转换为常规.Net字符(使用unicode)的代码为1029。