C#中的编码实验

在C#中,默认使用Unicode码,因此一个char占2个byte

实验1:通过ASCIIEncoding类进行转换char和byte

            string name = "xuwei";
            byte[] bName = ASCIIEncoding.ASCII.GetBytes(name.ToCharArray());
            int nBytes=ASCIIEncoding.ASCII.GetByteCount(name.ToCharArray());

单步运行,查看结果如下:

bName
{byte[5]}
    [0]: 120
    [1]: 117
    [2]: 119
    [3]: 101
    [4]: 105

nBytes

5

1个char只占用了1个byte

实验2:通过Marshal转换char和byte

            string name = "xuwei";
            IntPtr pName = Marshal.AllocHGlobal(10);
            Marshal.Copy(name.ToCharArray(), 0, pName, name.Length);
            byte[] bName = new byte[10];
            Marshal.Copy(pName, bName, 0, 10);
单步运行,查看结果如下:

bName
{byte[10]}
    [0]: 120
    [1]: 0
    [2]: 117
    [3]: 0
    [4]: 119
    [5]: 0
    [6]: 101
    [7]: 0
    [8]: 105
    [9]: 0

结论1:

可见,同样是将char转为byte型,使用不同的方法,但是出现了不同的结果

实验1和实验2是编码英文的,实验3和4编码中文 “徐薇”,其余代码相同,不重复

实验3:

用ASCIIEncoding类转换

结果为:

{byte[2]}
    [0]: 63
    [1]: 63

不是太清楚,难道是出错的标示?不可能只转成2个字节的

实验4:

用Marshal转换

结果为:

{byte[10]}
    [0]: 144
    [1]: 95
    [2]: 135
    [3]: 133
    [4]: 16
    [5]: 33
    [6]: 224
    [7]: 30
    [8]: 118
    [9]: 4



你可能感兴趣的:(String,C#,byte)