c語言改編碼
發布時間: 2024-08-13 15:38:52
Ⅰ 如何處理C語言編碼的問題
鏈接程序時,在裝入FORTRAN庫之前未指定C庫。解決步驟如下:
1,第一步是通過選項(例如/ FPi87,需要協處理器)編譯或鏈接程序。請注意,該程序在未安裝協處理器的計算機上運行。
Ⅱ 弱弱的問一句,C語言能不能實現字元串的編碼格式轉換 GB2312toUTF-8
其實 linux 和 windows 的系統函數都是C函數,並且提供了GB2312toUTF-8的函數,所以C語言是可以實現轉碼的。以下是windows的例子:int num = ::MultiByteToWideChar(CP_ACP, 0, "你好", -1, NULL, 0);wchar_t* m_arrayShort = new wchar_t[num];::MultiByteToWideChar(CP_ACP, 0, "你好", -1, m_arrayShort, num); int len = ::WideCharToMultiByte (CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, 0, 0, NULL, NULL);char *tmpPT = new char[len+1];::WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)m_arrayShort, num, tmpPT, len, NULL, NULL);tmpPT[len] = 0;
Ⅲ 怎樣用C語言實現漢字和ASCII碼到UNICODE碼的轉換
用MultiByteToWideChar和WideCharToMultiByte可以做到編碼的轉換。
- MultiByteToWideChar是一個windows API 函數,該函數映射一個字元串到一個寬字元(unicode)的字元串。函數原型:
int MultiByteToWideChar(
UINT CodePage,
DWORD dwFlags,
LPCSTR lpMultiByteStr,
int cchMultiByte,
LPWSTR lpWideCharStr,
int cchWideChar
);參數:
CodePage:指定執行轉換的字元集,這個參數可以為系統已安裝或有效的任何字元集所給定的值。你也可以指定其為下面的任意一值:
CP_ACP:ANSI字元集;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;
CP_SYMBOL:符號字元集(42);CP_THREAD_ACP:當前線程ANSI代碼頁;
CP_UTF7:使用UTF-7轉換;CP_UTF8:使用UTF-8轉換。
dwFlags:一組位標記用以指出是否未轉換成預作或寬字元(若組合形式存在),是否使用象形文字替代控制字元,以及如何處理無效字元。你可以指定下面是標記常量的組合,含義如下:
MB_PRECOMPOSED:通常使用預作字元——就是說,由一個基本字元和一個非空字元組成的字元只有一個單一的字元值。這是預設的轉換選擇。不能與
MB_COMPOSITE值一起使用。
MB_COMPOSITE:通常使用組合字元——就是說,由一個基本字元和一個非空字元組成的字元分別有不同的字元值。不能與MB_PRECOMPOSED值一起使用。
MB_ERR_INVALID_CHARS:如果函數遇到無效的輸入字元,它將運行失敗,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。
MB_USEGLYPHCHARS:使用象形文字替代控制字元。
組合字元由一個基礎字元和一個非空字元構成,每一個都有不同的字元值。每個預作字元都有單一的字元值給基礎/非空字元的組成。在字元è中,e就是基礎字元,而重音符標記就是非空字元。
函數的預設動作是轉換成預作的形式。如果預作的形式不存在,函數將嘗試轉換成組合形式。
標記MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而標記MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS則不管其它標記如何都可以設置。
lpMultiByteStr:指向將被轉換字元串的字元。
cchMultiByte:指定由參數lpMultiByteStr指向的字元串中位元組的個數。如果lpMultiByteStr指定的字元串以空字元終止,可以設置為-1(如果字元串不是以空字元中止,設置為-1可能失敗,可能成功),此參數設置為0函數將失敗。
lpWideCharStr:指向接收被轉換字元串的緩沖區。
cchWideChar:指定由參數lpWideCharStr指向的緩沖區的寬字元個數。若此值為零,函數返回緩沖區所必需的寬字元數,在這種情況下,lpWideCharStr中的緩沖區不被使用。返回值:
如果函數運行成功,並且cchWideChar不為零,返回值是由lpWideCharStr指向的緩沖區中寫入的寬字元數;如果函數運行成功,並且cchWideChar為零,返回值是接收到待轉換字元串的緩沖區所需求的寬字元數大小。如果函數運行失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。它可以返回下面所列錯誤代碼:
ERROR_INSUFFICIENT_BUFFER;ERROR_INVALID_FLAGS;
ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。 - WideCharToMultiByte,該函數映射一個unicode字元串到一個多位元組字元串。
函數原型:
int WideCharToMultiByte(
UINT CodePage, //指定執行轉換的代碼頁
DWORD dwFlags, //允許你進行額外的控制,它會影響使用了讀音符號(比如重音)的字元
LPCWSTR lpWideCharStr, //指定要轉換為寬位元組字元串的緩沖區
int cchWideChar, //指定由參數lpWideCharStr指向的緩沖區的字元個數
LPSTR lpMultiByteStr, //指向接收被轉換字元串的緩沖區
int cchMultiByte, //指定由參數lpMultiByteStr指向的緩沖區最大值
LPCSTR lpDefaultChar, //遇到一個不能轉換的寬字元,函數便會使用pDefaultChar參數指向的字元
LPBOOL pfUsedDefaultChar //至少有一個字元不能轉換為其多位元組形式,函數就會把這個變數設為TRUE
);
參數:
CodePage:指定執行轉換的代碼頁,這個參數可以為系統已安裝或有效的任何代碼頁所給定的值。你也可以指定其為下面的任意一值:
CP_ACP:ANSI代碼頁;CP_MACCP:Macintosh代碼頁;CP_OEMCP:OEM代碼頁;
CP_SYMBOL:符號代碼頁(42);CP_THREAD_ACP:當前線程ANSI代碼頁;
CP_UTF7:使用UTF-7轉換;CP_UTF8:使用UTF-8轉換
返回值:
如果函數運行成功,並且cchMultiByte不為零,返回值是由 lpMultiByteStr指向的緩沖區中寫入的位元組數;如果函數運行成功,並且cchMultiByte為零,返回值是接收到待轉換字元串的緩沖區所必需的位元組數。如果函數運行失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。它可以返回下面所列錯誤代碼:
ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS;
ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。
注意:指針lpMultiByteStr和lpWideCharStr必須不一樣。如果一樣,函數將失敗,GetLastError將返回ERROR_INVALID_PARAMETER的值。
Windows CE:不支持參數CodePage中的CP_UTF7和CP_UTF8的值,以及參數dwFlags中的WC_NO_BEST_FIT_CHARS值。
熱點內容