1. 程式人生 > >vc++中char*和CString轉換

vc++中char*和CString轉換

CString 是一種很特殊的 C++ 物件,它裡面包含了三個值:一個指向某個資料緩衝區的指標、一個是該緩衝中有效的字元記數(它是不可存取的,是位於 CString 地址之下的一個隱藏區域)以及一個緩衝區長度。 有效字元數的大小可以是從0到該緩衝最大長度值減1之間的任何數(因為字串結尾有一個NULL字元)。字元記數和緩衝區長度被巧妙隱藏。

(1) char*轉換成CString

  若將char*轉換成CString,除了直接賦值外,還可使用CString::Format進行。例如:

         char chArray[] = "Char  test";
         TCHAR * p = _T("Char  test");( 或LPTSTR p = _T("Char  test");)
         CString theString = chArray;
         theString.Format(_T("%s"), chArray);
         theString = p;

(2) CString轉換成char*

  若將CString類轉換成char*(LPSTR)型別,常常使用下列三種方法:

  方法一,使用強制轉換。例如:

       CString theString( (_T("Char test "));
        LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;

  方法二,使用strcpy。例如:

       CString theString( (_T("Char test "));
       LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
        _tcscpy(lpsz, theString);

  需要說明的是,strcpy(或可移值的_tcscpy)的第二個引數是 const wchar_t* (Unicode)或const char* (ANSI),系統編譯器將會自動對其進行轉換。

  方法三,使用CString::GetBuffer。

        如果你需要修改 CString 中的內容,它有一個特殊的方法可以使用,那就是 GetBuffer,它的作用是返回一個可寫的緩衝指標。 如果你只是打算修改字元或者截短字串,例如:
       CString s(_T("Char test "));
        LPTSTR p = s.GetBuffer(); 

        LPTSTR dot = strchr(p, ''.'');

         // 在這裡新增使用p的程式碼

          if(p != NULL) 

         *p = _T('');
         s.ReleaseBuffer();                     // 使用完後及時釋放,以便能使用其它的CString成員函式

         在 GetBuffer 和 ReleaseBuffer 之間這個範圍,一定不能使用你要操作的這個緩衝的 CString 物件的任何方法。因為 ReleaseBuffer 被呼叫之前,該 CString 物件的完整性得不到保障。

注:_T:如果編譯時指定生成UNICODE版本,則將字串轉換成UNICODE;如果編譯是沒有指定UNICODE,則就是一般的窄字元。

相關推薦

vc++char*CString轉換

CString 是一種很特殊的 C++ 物件,它裡面包含了三個值:一個指向某個資料緩衝區的指標、一個是該緩衝中有效的字元記數(它是不可存取的,是位於 CString 地址之下的一個隱藏區域)以及一個緩衝區長度。 有效字元數的大小可以是從0到該緩衝最大長度值減1之間的任何

vc字串數字轉換的函式:atoi,atol,strtod,strtol,strtoul 型別轉換

strtoul(將字串轉換成無符號長整型數)相關函式     atof,atoi,atol,strtod,strtol表頭檔案     #include<stdlib.h>定義函式     unsigned long int strtoul(const char *nptr,char **endp

BSTR、char*CString轉換(包括多位元組Unicode)

(1) char*轉換成CString  若將char*轉換成CString,除了直接賦值外,還可使用CString::Format進行。例如:view plaincopy char chArray[] = "This is a test"; char * p = "Th

VC char 與 wchar的轉換

char 轉 WCHAR WCHAR * charToWchar(char *s){    int w_nlen=MultiByteToWideChar(CP_ACP,0,s,-1,NULL,0);   WCHAR *ret;   ret=(WCHAR*) malloc(s

vs2010處理charCString

編寫個網路聊天的程式,sendto和recvfrom函式中使用char,使用sprintf格式化呢又提示警告,要用format函式,使用CString物件呢經過lParam引數傳遞後又不好轉換,接收端接收到的全是亂碼,

JavacharString的轉換

Java中char是一個基本型別,而String是一個引用型別。有時候我們需要在它們之間互相轉換。 String轉換為char 在Java中將String轉換為char是非常簡單的。 1. 使

MFC程式設計 char*CString兩種型別的互相轉換

問題 在程式設計時,因為用了c++作為邏輯層的編寫,其中的字串是以char*或者字元陣列的形式表現的,而不是以CString的物件表現的,尤其在從控制元件中讀取文字時,沒辦法使用等等,這裡,將介紹我使用的方法 char*到CString的轉換 char

javacharint型別的相互轉換

char型別轉int型: char numChar = '9'; int nSum = numChar-'0'; int型別轉cahr型:int num = 9; char numChar = n

Java charint之間的轉換

1、int 轉換成char:                 int  n = 1;                 char ch = (char)(n + '0');                 這樣打印出來ch的值為1;                 不過需要注

Javafloatdouble轉換的問題

leg throw exceptio int row 如何 方法 避免 stat   為什麽double轉float不會出現數據誤差,而float轉double卻誤差如此之大? double d = 3.14; float f = (float)d; Syst

mysqlcharvarchartext的區別(不看後悔,一看必懂)

①CHAR是一種固定長度的型別,適合用在身份證號碼、手機號碼等定。,VARCHAR則是一種可變長度的型別。適合用在長度可變的屬性。 text不設定長度, 當不知道屬性的最大長度時,適合用text。 ②按照查詢速度: char最快, varchar次之,text最慢。 也就是說,

MySQL char varchar 的區別

 一、VARCHAR與CHAR字元型資料的差異   在MySQL資料庫中,用的最多的字元型資料型別就是Varchar和Char,這兩種資料型別雖然都是用來存放字元型資料,但是無論從結構還是從資料的儲存方式來看,兩者相差很大。而且其具體的實現方式,還依賴與儲存引擎。我這裡就以大家最常用的MYISAM儲

mysqlcharvarchar

引言 以前對char的理解是固定長度,varchar可變長度的,對於char不管實際長度是否等於固定長度都按固定長度計算,varchar是根據時間長度計算的,所以感覺varchar是挺方便節省空間的。但是在看書的時候發現以前的理解是有偏差的,在此mark一下。 MySQL中varchar最大

VC++ PostMessageSendMessage的區別

  函式功能:該函式為一個訊息檢查執行緒訊息佇列,並將該訊息(如果存在)放於指定的結構。  函式原型:BOOL PeekMessage(LPMSG IpMsg,HWND hWnd,UINT wMSGfilterMin,UINT wMsgFilterMax,UINT wRemoveMsg);  引數:  lpM

字串漢字數字轉換成拼音

var transliteration =require(‘transliteration’); ToPin('你好123'); 程式碼: function ToPin(str){ var array =[]; var newstr =""; for(var i

【轉】VC++的影象型別轉換--使用開源CxImage類庫

一。CxImage類庫簡介 這只是翻譯了CxImage開源專案主頁上的部分簡介及簡單使用。 CxImage類庫是一個優秀的影象操作類庫。它可以快捷地存取、顯示、轉換各種影象。有的讀者可能說,有那麼多優秀的圖形庫,如OpenIL,FreeImage,PaintLib等等,它們可

如何在VS VC DLL使用CString

CString類用起來非常方便,可是如果不對預設的工程進行一些手術,就沒法使用它 具體的修改方法如下,與大家分享一下。 在stdfax中加入下面的紅色部分   // stdafx。h   #if !defined(AFX_STDAFX_H__A9DB83DB_A9F

C++char *char []的區別

以前一直覺得這兩個有區別,但也沒深究,今天寫了個程式碼報了警告於是就看了看,總結如下。 例如如下程式碼: #include<iostream> using namespace std; int main() { char *p1

VC數字與字串轉換方法

字串轉數字 1.CRT函式 ASCII UNICODE TCHAR VS2005 int atoi _wtoi _tstoi _ttoi _atoi_l _wtoi_l long atol _wtol _tstoi _t

Spark學習筆記 --- SparkMapFlatMap轉換的區別

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------