欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C# 中的char 和 byte

程序员文章站 2022-05-27 08:37:14
...

在C#中,char代表一个Unicode的字符,占用的内存不是一个byte。而byte还是一个字节。

那么在char和byte之间copy操作时,可能结果不是我们想要的。
示例:

static void Main(string[] args)
        {
            byte[] bytes = { 0x31,0x32,0x33,0x34};      // 
            char[] chars1 = new char[4];
            char[] chars2 = new char[4];
            //
            System.Buffer.BlockCopy(bytes,0,chars1,0,4);

            for (int i = 0; i<4; i++)
            {
                chars2[i] = (char)bytes[i];
            }

            string str1 = new string(chars1);   // 
            string str2 = new string(chars2);   // 1234

            System.Console.Read();
        }

执行时的内存情况:
C# 中的char 和 byte

using System.Globalization;
using System.Runtime;
using System.Runtime.InteropServices;

namespace System
{
    //
    // 摘要:
    //     将字符表示为 UTF-16 代码单位。
    [ComVisible(true)]
    public struct Char : IComparable, IConvertible, IComparable<Char>, IEquatable<Char>
    {
        //
        // 摘要:
        //     表示 System.Char 的最大可能值。此字段为常数。
        public const Char MaxValue = '\uffff';
        //
        // 摘要:
        //     表示 System.Char 的最小可能值。此字段为常数。
        public const Char MinValue = '\0';

        //
        // 摘要:
        //     将指定的 Unicode 码位转换为 UTF-16 编码字符串。
        //
        // 参数:
        //   utf32:
        //     21 位 Unicode 码位。
        //
        // 返回结果:
        //     由一个 System.Char 对象或一个 System.Char 对象的代理项对组成的字符串,等效于 utf32 参数所指定的码位。
        //
        // 异常:
        //   T:System.ArgumentOutOfRangeException:
        //     utf32 不是从 U+0 到 U+10FFFF 的有效的 21 位 Unicode 码位,不包括从 U+D800 到 U+DFFF 的代理项对。
        public static string ConvertFromUtf32(int utf32);
        //
        // 摘要:
        //     将 UTF-16 编码的代理项对的值转换为 Unicode 码位。
        //
        // 参数:
        //   highSurrogate:
        //     高代理项代码单元(即代码单元从 U+D800 到 U+DBFF)。
        //
        //   lowSurrogate:
        //     低代理项代码单元(即代码单元从 U+DC00 到 U+DFFF)。
        //
        // 返回结果:
        //     highSurrogate 和 lowSurrogate 参数表示的 21 位 Unicode 码位。
        //
        // 异常:
        //   T:System.ArgumentOutOfRangeException:
        //     highSurrogate 不在 U+D800 到 U+DBFF 的范围内,或 lowSurrogate 不在 U+DC00 到 U+DFFF 的范围内。
        public static int ConvertToUtf32(Char highSurrogate, Char lowSurrogate);

    // ... ...
  }
}   
 //
    // 摘要:
    //     表示一个 8 位无符号整数。
    [ComVisible(true)]
    public struct Byte : IComparable, IFormattable, IConvertible, IComparable<Byte>, IEquatable<Byte>
    {
        //
        // 摘要:
        //     表示 System.Byte 的最大可能值。此字段为常数。
        public const Byte MaxValue = 255;
        //
        // 摘要:
        //     表示 System.Byte 的最小可能值。此字段为常数。
        public const Byte MinValue = 0;

    // ... ...
  }
}