日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

StringBuilder和Char[]在平台调用中的差异

發(fā)布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 StringBuilder和Char[]在平台调用中的差异 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

StringBuilder和Char[]在平臺調(diào)用中的差異如下:

  • StringBuilder不能接收以2個'\0'結(jié)尾的多個字符串集合,只能保留第一個字符串,剩余的字符串被舍棄。而Char[]可以獲取完整的多個字符串集合。總之,如果接收的字符串中間包含'\0',則StringBuilder只能獲取第一個'\0'前的字符,后面的字符被舍棄。
  • 將結(jié)果轉(zhuǎn)換成String類型時,StringBuilder的轉(zhuǎn)換方式為使用自身的成員函數(shù):public overridestring ToString()。Char[]的轉(zhuǎn)換方法必須使用String的構(gòu)造函數(shù):public String(Char[] value,? int startIndex, int length),而不是簡單的:public String(Char[] value),以消除垃圾字符。
  • 示例一:

    BOOL GetUserPreferredUILanguages(
    __in DWORD dwFlags,
    __out PULONG pulNumLanguages,
    __out_opt PZZWSTR pwszLanguagesBuffer,
    __inout PULONG pcchLanguagesBuffer
    );

    由于pwszLanguagesBuffer中接收的是以2個'\0'結(jié)尾的多個字符串集合,因此應(yīng)該使用Char[]類型。

    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
    private static extern Boolean GetUserPreferredUILanguages(
    UInt32 dwFlags,
    out Int32 pulNumLanguages,
    [Out] Char[] pwszLanguagesBuffer,
    ref Int32 pcchLanguagesBuffer
    );

    /// <summary>
    /// 獲取用戶偏好的界面語言
    /// </summary>
    /// <param name="dwFlags">
    /// MUI_LANGUAGE_ID = 4:語言ID
    /// MUI_LANGUAGE_NAME = 8:語言名稱
    /// </param>
    /// <returns>偏好的語言集合</returns>
    public static String[] GetUserPreferredUILanguages(UInt32 dwFlags = MUI_LANGUAGE_NAME)
    {
    // 計算需要的空間大小
    Int32 NumLanguages;
    Int32 cchLanguagesBuffer = 0;
    if (GetUserPreferredUILanguages(dwFlags, out NumLanguages, null, ref cchLanguagesBuffer))
    {
    if (NumLanguages > 0)
    { // 獲取實際的數(shù)據(jù)
    Char[] LanguagesBuffer = new Char[cchLanguagesBuffer];
    GetUserPreferredUILanguages(dwFlags, out NumLanguages, LanguagesBuffer, ref cchLanguagesBuffer);

    // 提取所有的語言
    return new String(LanguagesBuffer).TrimEnd('\0').Split('\0');
    }
    }

    return null;
    }

    示例二:

    int GetUserDefaultLocaleName(
    __out LPWSTR lpLocaleName,
    __in int cchLocaleName
    );

    使用StringBuilder:

    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
    private static extern Int32 GetUserDefaultLocaleName([Out] StringBuilder lpLocaleName, Int32 cchLocaleName);

    public const Int32 LOCALE_NAME_MAX_LENGTH = 85;

    /// <summary>
    /// 獲取用戶缺省本地語言名稱
    /// </summary>
    /// <returns>本地語言名稱</returns>
    public static String GetUserDefaultLocaleName()
    {
    StringBuilder lpLocaleName = new StringBuilder(LOCALE_NAME_MAX_LENGTH);
    if (GetUserDefaultLocaleName(lpLocaleName, LOCALE_NAME_MAX_LENGTH) > 0)
    {
    return lpLocaleName.ToString();
    }

    return null;
    }

    使用Char[],轉(zhuǎn)換成String類型時需要消除垃圾字符:

    [DllImport("Kernel32.dll", CharSet = CharSet.Auto)]
    private static extern Int32 GetUserDefaultLocaleName([Out] Char[] lpLocaleName, Int32 cchLocaleName);

    public const Int32 LOCALE_NAME_MAX_LENGTH = 85;

    /// <summary>
    /// 獲取用戶缺省本地語言名稱
    /// </summary>
    /// <returns>本地語言名稱</returns>
    public static String GetUserDefaultLocaleName()
    {
    Char[] lpLocaleName = new Char[LOCALE_NAME_MAX_LENGTH];
    Int32 Length = GetUserDefaultLocaleName(lpLocaleName, LOCALE_NAME_MAX_LENGTH);
    if (Length > 0)
    {
    return new String(lpLocaleName, 0, Length - 1);
    }

    return null;
    }

    本文編輯:插秧機 www.cgjfg.com?。




    轉(zhuǎn)載于:https://www.cnblogs.com/seoer/archive/2011/12/13/2285970.html

    總結(jié)

    以上是生活随笔為你收集整理的StringBuilder和Char[]在平台调用中的差异的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。