中文字元wchar t 寬字串 BSTR

2021-10-21 18:13:53 字數 2747 閱讀 7466

#include

#include

#include

#include

#include

char sbuf[20]

=;// 在窄字串中乙個中文字元就是兩個位元組,所以 strlen("中國") = 4

strcpy_s

(sbuf,

strlen

("我愛中國china")+

1,"我愛中國china");

cout <<

strlen

(sbuf)

<< endl;

// 輸出 13

/*! 返回值wlen 是窄字串轉換成寬字串後,寬字串buffer的長度

*/ dword wlen =

multibytetowidechar

(cp_acp,

0, sbuf,

strlen

(sbuf)

,null,0

);cout << wlen << endl;

// 下面的寬字串定義的大小 wlen 剛好容納窄字串不包括結尾null的有效長度

wchar_t

* wstr =

newwchar_t

[wlen]

;multibytetowidechar

(cp_acp,

0, sbuf,

strlen

(sbuf)

, wstr, wlen);

cout <<

wcslen

(wstr)

<< endl;

// 這個輸出是錯誤的,不等於 wlen

// wcout 以下處理可以列印寬字串

wcout.

imbue

(locale(""

, lc_ctype));

wcout << wstr << endl;

variant var1;

var1.lval =

123467

; variant var2;

var2.bstrval = l"我愛中國china"

; variant var3;

var3.bstrval = l"我不愛日本japan"

;wchar_t

* lval =

newwchar_t[10

];wmemset

(lval,0,

10);// 格式化字串 第二個引數是要格式化字元的長度 + 1

// 就剛好拷貝格式化字串不包括結尾null到lval

swprintf

(lval,

11, l"%ld"

, var1.lval)

;// long 轉換成 wchar_t 第乙個是lon**alue 第三個引數size_t是第二個引數wchar_t的長度

// 第四個是進製

_ltow_s

(var1.lval, lval,10,

10); cout <<

"good:"

<<

wcslen

(lval)

<< endl;

int wlen =

wcslen

(lval)

+wcslen

(var2.bstrval)

+wcslen

(var3.bstrval)

;delete

lval;

// 上面這麼麻煩的原因就是為了合理申請不多不少,剛好需要的堆的大小 wlen

wchar_t

* result =

newwchar_t

[wlen]

;wmemset

(result,

0, wlen)

;// 把com介面出來的variant出參或入參,統一格式化字串wchar_t

swprintf

(result, wlen +

1, l"%ld%ls%ls"

, var1.lval, var2.bstrval, var3.bstrval)

; wcout.

imbue

(locale(""

, lc_ctype));

wcout <<

"result:"

<< result << endl;

wstring love;

variant var1;

var1.lval =

1234

; variant var2;

var2.bstrval = l"我愛上海shanghai"

; variant var3;

var3.bstrval = l"我愛奧蘭多olando"

;wchar_t

* haha =

newwchar_t[10

];_ltow_s

(var1.lval, haha,10,

10); love.

(haha)

; love.

(var2.bstrval)

; love.

(var3.bstrval)

; wcout.

imbue

(locale(""

, lc_ctype));

wcout << love << endl;

php中文字元字串反轉字串

header content type text html charset utf 8 s 這是我的技術部落格,歡迎多多來訪!function str rev str 用mb strlen函獲取算utf8字串的長度 length mb strlen str,utf 8 宣告乙個陣列備用 arr ar...

C 判斷中文字元(字串)

it168技術文件 在unicode 字串中,中文的範圍是在4e00.9fff cjk unified ideographs。通過對字元的unicode編碼進行判斷來確定字元是否為中文。protected bool ischineseletter string input,intindex else...

C 判斷中文字元(字串)

方法一 原文 在unicode 字串中,中文的範圍是在4e00.9fff cjk unified ideographs。通過對字元的unicode編碼進行判斷來確定字元是否為中文。protected bool ischineseletter string input,int index else r...