VS2008多位元組與單位元組問題

2021-06-14 18:23:18 字數 547 閱讀 7280

在vs2008中使用sprintf遇到問題:

tchar  name[20];

char sql[20]="";

getdlgitem(idc_name)->getwindowtext(name,20);

sprintf(sql,"%s",name);

程式執行後在sql怎麼也只能得到乙個字元,將name改為cstring型別同樣有此問題。

最終發現是開發環境中tchar為寬位元組(

unicode字元

),而sprintf中是ascii單位元組字元,sprintf遇到下一位元組的0時結束。

解決方法:

使用mfc中提供的函式

寬位元組轉多位元組 :widechartomultibyte   //其實這裡的多位元組就是我們說的ascii單位元組

多位元組轉寬位元組 :multibytetowidechar   //多位元組也就是ascii單位元組

例子:char name0[20];

widechartomultibyte(cp_oemcp,0,name,20,name0,20,0,0);

寬位元組 多位元組 單位元組 的問題

感覺比較混亂,學習了一通,做個記錄。著急在windows下面用的話,可以先看這個 vc windows 平台字元透明程式設計大總結 寬字串與單位元組字串之間的轉換。c 標準裡面已經提供了 寬位元組轉單位元組 size twcstombs char mbstr constwchar t wcstr s...

單位元組字符集,多位元組字符集,Unicode

我們在這裡介紹一下字元型別。這裡有3種編碼模式對應3種字元型別。第一種編碼型別是單子節字符集 single byte character set or sbcs 在這種編碼模式下,所有的字元都只用乙個位元組表示。ascii是sbcs。乙個位元組表示的0用來標誌sbcs字串的結束。第二種編碼模式是多位...

多位元組與寬位元組之間的轉換

1 函式 widechartomultibyte 轉換 unicode 到 mbcs。lpcolestr lpw l hello,你好 size t wlen wcslen lpw 1 寬字元字元長度,1表示包含字串結束符 int alen widechartomultibyte 第一次呼叫,計算所...