none
.net中字符串默认是使用大端Unicode还是小端Unicode? RRS feed

  • 问题

  • 最近在学习关于C#处理字符串编码的知识,我知道在.net中所有字符串都是默认使用unicode进行编码的,但是具体是使用大端还是小端呢?

    使用这个方法显示,好像是大端:

    string a_string ="中文汉字和English";
    	foreach (char b in a_string.ToCharArray())
    	{
    		Console.Write("{0:X2} ",Convert.ToInt32(b));
    	}

    结果是:4E2D 6587 6C49 5B57 548C 45 6E 67 6C 69 73 68 

    	byte[] char_in_byte_in_string = System.Text.Encoding.BigEndianUnicode.GetBytes("中文编码和English");
        foreach (byte b in char_in_byte_in_string)
    {
    	Console.Write("{0:x2} ",b);
    结果是一样的。

    而使用:

    byte[] char_in_byte_in_string = System.Text.Encoding.Unicode.GetBytes("中文编码和English");
    foreach (byte b in char_in_byte_in_string)
    {
    	Console.Write("{0:x2} ",b);
    }

    结果是:

    2d 4e 87 65 16 7f 01 78 8c 54 45 00 6e 00 67 00 6c 00 69 00 73 00 68 00 

    明显是小端编码。

    那么 到底哪里一种才是.net中真正的编码方式呢?

    个人认为是小端,因为x86平台默认的unicode是小端编码。

    有没有办法直接将中文字符用16进制或2进制表示,而不用convert转换呢。(感觉就是因为这个转换使得结果出现了问题)。

    2013年5月17日 10:00