Visual C++ 常用數(shù)據(jù)類型轉(zhuǎn)換方法詳解
16。關(guān)于COM類型轉(zhuǎn)換問題??
我定義了兩個變量,一個是void *piaRef=new unsigned char[1000];另一個是m_Temp=new CComVariant();我的問題是如何將piaRef中的值
COPY到m_Temp中。
回復(fù)人: nichang() (2001-11-21 15:34:04) 得0分
CComBSTR bsRef=piaRef;
m_Temp=bsRef.copy()
回復(fù)人: VincentChin(瘟神) (2001-11-21 17:04:24) 得0分
CComBSTR bsRef=piaRef;
//error C2440: 'initializing' : cannot convert from 'void *' to 'class ATL::CComBSTR'
m_Temp=bsRef.copy();
//error C2440: '=' : cannot convert from 'unsigned short *' to 'class ATL::CComVariant *'
回復(fù)人: nichang() (2001-11-21 17:14:28) 得0分
將void*改為unsigned char *
回復(fù)人: VincentChin(瘟神) (2001-11-21 17:22:22) 得0分
我用CComBSTR bsRef=(unsigned char*)piaRef,也不行嗎?
回復(fù)人: VincentChin(瘟神) (2001-11-21 17:28:06) 得0分
會報錯:
error C2440: 'type cast' : cannot convert from 'unsigned char *' to 'class ATL::CComBSTR'
回復(fù)人: nichang() (2001-11-22 9:12:14) 得0分
m_Temp=::SysAllocString((OLECHAR *)piaRef)
回復(fù)人: VincentChin(瘟神) (2001-11-22 10:43:07) 得0分
//error C2440: '=' : cannot convert from 'unsigned short *' to 'class ATL::CComVariant *'
回復(fù)人: VincentChin(瘟神) (2001-11-22 11:22:35) 得0分
m_Temp=new CComVariant(::SysAllocString(OLECHAR *)piaRef));沒有出錯,但是我的m_Temp是COM組件中的一個PROPERTY,我想返回的是
unsigned char類型(單字節(jié)),但經(jīng)過上述轉(zhuǎn)換后,就不再是單字節(jié)了呀!怎么辦?
回復(fù)人: jiangsheng(蔣晟) (2001-11-22 11:36:58) 得0分
把這個屬性的類型改成BSTR
回復(fù)人: GrayWhite(灰白) (2001-11-22 12:01:09) 得0分
m_Temp = new CComVariant((char*) piaRef);就可以了。VB就是用的BSTR,你要給誰用阿?VC不用VARIANT的。
回復(fù)人: GrayWhite(灰白) (2001-11-22 12:18:18) 得19分
哦,我明白了,你要各字節(jié)數(shù)組:
SAFEARRAY *psa = SafeArrayCreateVector(VT_UI1, 0, 1000);
if (!psa)
_com_issue_error(ERROR_NOT_ENOUGH_MEMORY);
HRESULT hr
for (long i = 0; i < 2; i ++)
{
if (FAILED (hr = SafeArrayPutElement(psa, &i, piaRef + i)))
_com_issue_error(hr);
}
_variant_t va; // include <comdef.h>
va.vt = VT_ARRAY | VT_UI1;
va.parray = psa;
m_Temp = new CComVariant(va);
回復(fù)人: VincentChin(瘟神) (2001-11-22 14:21:08) 得0分
SafeArrayPutElement(psa, &i, piaRef + i)
//error C2036: 'void *' : unknown size
回復(fù)人: VincentChin(瘟神) (2001-11-22 14:46:05) 得0分
To GrayWhite:為什么要for(long i=0;i<2;i++)?
回復(fù)人: nichang() (2001-11-22 15:16:35) 得0分
到底你想怎樣轉(zhuǎn)換嘛,是將數(shù)組內(nèi)的值拷貝到CComVariant中存為字符串嗎?
回復(fù)人: VincentChin(瘟神) (2001-11-22 15:28:35) 得0分
我是想把piaRef中的值照原樣返回給其它程序使用。我正在做的是一個COM組件。謝謝各位!
回復(fù)人: nichang() (2001-11-22 15:34:40) 得10分
unsigned char *s=new unsigned char[1000];
strcpy((char*)s,"1234");//可以用你自己方法設(shè)置s中的值。
BSTR bstrS;
oleS=A2WBSTR((char*)s);//將char*轉(zhuǎn)換成BSTR類型
CComVariant comVT;
comVT=oleS;//將BSTR轉(zhuǎn)成CComVariant,這里一步也可,comVT=A2WBSTR((char*)s);
回復(fù)人: VincentChin(瘟神) (2001-11-22 16:54:07) 得0分
謝謝你!
但我還有一個問題,就是如果在s中有'/0'之類的東西我該怎么返回呢?char *遇到'/0'會認(rèn)為到頭了。完整的設(shè)計是這樣的,我定義一個void * 用來從一個外部設(shè)備獲取數(shù)據(jù),該數(shù)據(jù)應(yīng)該是unsigned char,我想把這個返回的數(shù)據(jù)作為屬性傳出,讓其它應(yīng)用使用(如VB)。
回復(fù)人: nichang() (2001-11-22 17:18:09) 得0分
將'/0'轉(zhuǎn)換成其它如'/1'就OK了,
回復(fù)人: jiangsheng(蔣晟) (2001-11-22 18:07:16) 得0分
用字符串?dāng)?shù)組
回復(fù)人: VincentChin(瘟神) (2001-11-23 15:54:39) 得0分
謝謝各位的回復(fù)!我的問題解決了!如下:
SAFEARRAY *psa = SafeArrayCreateVector(VT_UI1, 0, 1000);
if (!psa)
return S_FALSE;
HRESULT hr;
for (long i = 0; i < 1000; i ++)
if (FAILED (hr = SafeArrayPutElement(psa, &i, ((unsigned char*)piaRefTemplate) + i)))
return S_FALSE;
VARIANT va;
va.vt = VT_ARRAY | VT_UI1;
va.parray = psa;
CComVariant *m_Temp = new CComVariant();
m_Temp->Copy(&va);
17。類型轉(zhuǎn)換 static_cast reinterprete_cast 的區(qū)別??
static_cast reinterprete_cast 的區(qū)別
回復(fù)人: tar(GPS) (2001-11-21 10:06:41) 得0分
static_cast會檢查轉(zhuǎn)換類型健的相關(guān)性
如果沒有的畫會有編譯錯誤
reinterprete_cast就是硬轉(zhuǎn)了
回復(fù)人: tigerwoods(tao) (2001-11-21 12:28:19) 得0分
是否可以這樣理解:在多重繼承中,static_cast可實現(xiàn)對象指針的移動,從而指向正確的父類對象部分,而reinterprete_cast不作偏移?
回復(fù)人: liu_feng_fly(我恨死驅(qū)動程序了,哎,就是為了混口飯吃) (2001-11-21 12:35:14) 得0分
在多重繼承中可以用dynamic_cast啊
18。那如何取得CString中的字符串??
回復(fù)人: nichang() (2001-11-5 17:06:00) 得0分
=(LPCTSTR)CString變量
回復(fù)人: snake1122(領(lǐng)悟) (2001-11-5 17:12:16) 得0分
方法太多了:
GetAt,Left,Mid,Right等等,就看你怎么取了!
回復(fù)人: dusb(保時捷) (2001-11-5 17:34:29) 得0分
可是不管是GetAt,Left,Mid,Right返回類型都是CString,還是不能用,我是要取其中的字符串,奇怪的是,VC中沒有string類型。(我要的字符串是給樹型控件中的分支名稱)
回復(fù)人: Alps_lou(云飛揚(yáng)) (2001-11-5 17:41:36) 得0分
有string類型的啊,要包含<string>
回復(fù)人: luxes() (2001-11-5 17:42:19) 得0分
加上(LPCTSTR),相當(dāng)于一個const char *了,還不能用?
回復(fù)人: wt007(tt) (2001-11-5 17:48:33) 得0分
GetBuffer
回復(fù)人: espon99() (2001-11-5 17:54:06) 得20分
(LPSTR)(LPCTSTR)
回復(fù)人: ineedyou(古寺僧) (2001-11-5 17:59:29) 得0分
...m_str.GetBuffer(needlen)...;
....
m_str.ReleaseBuffer()
回復(fù)人: dusb(保時捷) (2001-11-6 15:08:36) 得0分
espon99大俠,果然是絕招,不過能否解釋一下啊?
19。如何從CString類型轉(zhuǎn)換為Unicode string 類型?
回復(fù)人: ychener(貧血) (2001-10-20 10:28:48) 得0分
CString本身就支持Unicode的。
只要你選擇的是UniCode編譯,生成的可執(zhí)行程序就是支持UniCode的
回復(fù)人: ychener(貧血) (2001-10-20 10:30:04) 得0分
CString類是自適應(yīng)的就像TCHAR一樣,如果你定義了UniCode宏 就會以UniCode編譯
回復(fù)人: xjl1980_81(阿龍) (2001-10-20 10:35:16) 得0分
不是呀,我有個函數(shù)中有一個參數(shù)需Unicode string 類型的,比如應(yīng)該填L"abc",而且引號中的內(nèi)容要有變化,現(xiàn)在我有一個 temp變量,是CString類型的,如何用呀?
回復(fù)人: xt_jat(桑巴) (2001-10-20 10:39:37) 得0分
_T()
_TEXT()
行不行?
回復(fù)人: xjl1980_81(阿龍) (2001-10-20 10:43:18) 得0分
不行
回復(fù)人: Jeffery__Chen() (2001-10-20 11:04:53) 得0分
強(qiáng)制轉(zhuǎn)化:
CString temp;
WCHAR wTemp = (WCHAR)temp;
回復(fù)人: xjl1980_81(阿龍) (2001-10-20 11:37:06) 得0分
to:Jeffery__Chen()
不對呀,出現(xiàn)不能轉(zhuǎn)換的錯誤
回復(fù)人: hongzhh(關(guān)兒) (2001-10-20 11:39:42) 得0分
問題是這樣的:
temp 是 CString類型變量,值為zhh
現(xiàn)在有一個API
PCCERT_CONTEXT WINAPI CertFindCertificateInStore(
HCERTSTORE hCertStore,
DWORD dwCertEncodingType,
DWORD dwFindFlags,
DWORD dwFindType,
const void *pvFindPara, //此處用 L"zhh" 沒問題
//請問怎么轉(zhuǎn)換 可以 用temp
PCCERT_CONTEXT pPrevCertContext
);
在此謝謝大家,請幫忙看看
回復(fù)人: hongzhh(關(guān)兒) (2001-10-20 13:27:10) 得0分
WCHAR wszDomain[256];
MultiByteToWideChar( CP_ACP, 0, temp,
strlen(temp)+1, wszUserName,
sizeof(wszUserName)/sizeof(wszUserName[0]) );
wszUserName就是轉(zhuǎn)換后的值
回復(fù)人: ychener(貧血) (2001-10-23 11:43:05) 得0分
只要你用的是CString的函數(shù)就行的,如果你要用類似strcpy函數(shù)時,看看MSDN中一般情況下都有響應(yīng)的函數(shù)對于Unicode的。只要換成_tcscpy等等。
回復(fù)人: ychener(貧血) (2001-10-23 11:44:10) 得0分
你有沒有定義Unicode宏?
20。請問在用ATL且不支持MFC的組件開發(fā)中,如何將從數(shù)據(jù)庫中讀到的DATE數(shù)據(jù)類型轉(zhuǎn)換回為字符串??
復(fù)人: zhxuys(zhxuys) (2001-9-24 10:36:47) 得0分
ATL把datetime類型的列映射為DBTIMESTAMP類型,可取出該類型的year、month、day等,然后將這些數(shù)據(jù)傳遞回客戶端,在客戶端用CTime來構(gòu)造
回復(fù)人: YUANXU(旭) (2001-9-24 11:18:14) 得0分
to zhxuys:CTime是MFC類,在ATL 不支持MFC時不能用。DATE其實質(zhì)是個double*
回復(fù)人: zhxuys(zhxuys) (2001-9-24 11:57:01) 得0分
你在客戶端與服務(wù)器端只用ATL規(guī)定的數(shù)據(jù)類型或VARIANT類型,而在客戶端,可以用MFC來重新構(gòu)造想要的數(shù)據(jù)結(jié)構(gòu)
21。類型轉(zhuǎn)換,CString to wchar_t ??
CString ss("aabb");
wchar_t* cc;
cc=ss.AllocSysString();
22。如何將CString類型轉(zhuǎn)換為_bstr_t類型?
回復(fù)人: wei97081116(韋小寶) (2001-9-4 11:19:30) 得20分
CString b;
_bstr_t a;
a=(_bstr_t)b;
回復(fù)人: zhaozhen1212(趙振) (2001-9-18 1:30:18) 得0分
_bstr_t a=b.AllocSysString();;
23。如何把一個CString類型轉(zhuǎn)換成一個普通的字符串,如char*?
回復(fù)人: liu_feng_fly(我恨死驅(qū)動程序了,哎,就是為了混口飯吃) (2001-9-17 18:00:52) 得0分
所以,直接用就可以,因為類里邊有這樣的轉(zhuǎn)換函數(shù)
回復(fù)人: ydogg(灰毛兔頻頻) (2001-9-17 18:01:21) 得0分
CString show;
char *p = show.GetBuffer(show.GetLength());
回復(fù)人: jiangping_zhu(娜可露露之風(fēng)之刃) (2001-9-17 18:02:05) 得0分
(char*)(LPCTSTR)str
回復(fù)人: bmouse(老鼠) (2001-9-18 0:10:56) 得0分
同意樓上!
回復(fù)人: bmouse(老鼠) (2001-9-18 0:13:22) 得0分
你還可以通過GetBuff來直接操作CString的緩沖區(qū),不過要記著釋放緩沖區(qū).
24。CString 類型轉(zhuǎn)換成 unsigned char類型嗎??
回復(fù)人: LJN(*)風(fēng)流倜儻無人及,玉樹偏又臨風(fēng)立(*) (2001-9-17 12:46:01) 得0分
可以用CString.GetBuffer函數(shù)
回復(fù)人: xpmao() (2001-9-17 13:09:09) 得0分
CString strWork;
MessageBox(0,(LPSTR)strWork,0,0);
或MessageBox(0,strWork.GetBuffer(0),0,0);
回復(fù)人: sandd(降龍掌) (2001-9-17 13:17:32) 得0分
CString string;
(LPCTSTR)string;
回復(fù)人: jeff_hunter(PandaLee) (2001-9-17 13:45:30) 得0分
(unsigned char *)(LPCTSTR)
回復(fù)人: fandh(好了) (2001-9-17 14:00:57) 得0分
用(unsigned char *)(LPCTSTR)即可
回復(fù)人: ygd(ygd) (2001-9-17 16:11:17) 得0分
unsigned char *p;
CString str;
int length=str.GetLength();
for(int i=0;i<length;i++)
p[i]=str.GetAt(i);
回復(fù)人: swordbroken(斷劍書生) (2001-9-17 16:25:57) 得0分
CString str;
unsigned char string[30];
strcpy(string,str);
25。何將一個unsigned int 類型變量值賦給類型為unsigned short的變量,并保證數(shù)值不丟失(當(dāng)然數(shù)值在一定范圍內(nèi))?
回復(fù)人: maxsuy(魔法師兔子) (2001-8-14 16:37:30) 得0分
直接=就OK了
回復(fù)人: oppmm(ppmm) (2001-8-14 16:38:11) 得0分
直接賦值
回復(fù)人: milefo(彌勒佛) (2001-8-14 16:40:40) 得0分
如果數(shù)值在一定范圍內(nèi)怎么回丟失呢?
unsigned short a;
unsigned int b;
a=( b & 0xffff);
你試試看吧!
26。CString ----char*
定義了char* aa的變量,現(xiàn)在有一個CString的變量bb,怎樣把bb的值賦給aa呢?
回復(fù)人: emmai(WaTaXiWaWaTaXi) (2001-8-10 11:57:33) 得0分
aa=bb.GetBuffer();
回復(fù)人: hswqs(??????????????????) (2001-8-10 11:59:01) 得0分
aa= (LPSTR)(LPCTSTR)bb;
回復(fù)人: ydogg(灰毛兔) (2001-8-10 12:27:23) 得0分
1.aa=bb.GetBuffer(bb.GetLenth());//第一種方法
2.aa= (LPSTR)(LPCTSTR)bb; //第二種方法
回復(fù)人: zhizhi() (2001-8-10 13:16:23) 得0分
aa= (char *)(LPCTSTR)bb,hehe
27。在一個COM的接口函數(shù)中有一個 BSTR* 類型的參數(shù),需要把一個 char * 類型轉(zhuǎn)換為 BSTR* 類型,不知道如何轉(zhuǎn)換? 由于調(diào)用這個函數(shù)后需要把這個參數(shù)值再取出來所以只能用指針,另外在調(diào)用的時候應(yīng)該用什么類型的數(shù)據(jù)傳遞參數(shù)呢?大蝦幫忙。
BSTR bstr = SysAllocString(L"字符串");
這樣轉(zhuǎn)換,用的時候你用地址操作符&啊,要不指針還得new
回復(fù)人: yongyue2000i(小呂) (2001-9-9 18:38:26) 得13分
CString str = "abcd";
BSTR bstr = str.AllocSysString();
回復(fù)人: houjzs() (2001-9-9 19:14:44) 得13分
BSTR b = SysAllocString(OLESTR("your string"));
28。要把一個double的數(shù)字輸出到CEdit控件是否需要類型轉(zhuǎn)換?
回復(fù)人: jiangsheng(蔣晟) (2001-8-24 14:46:17) 得0分
void AFXAPI DDX_Text( CDataExchange* pDX, int nIDC, double& value );
回復(fù)人: xiezhsh(雪中行) (2001-8-24 14:56:22) 得0分
假如你的CEdit相關(guān)的成員變量是Double型的,那根本用不著.(ClassWizard增加成員變量的對話框中,Variable Type選擇Double可)
回復(fù)人: xiezhsh(雪中行) (2001-8-24 14:58:16) 得0分
假如你的CEdit相關(guān)的成員變量不是Double型的,是CString型,那就需要用ltoa()來轉(zhuǎn)換成CString型,
回復(fù)人: haven(大天) (2001-8-24 14:58:32) 得0分
m_Edit.Fromat("%l",VarBouble);
updatedata(false);
回復(fù)人: 12345678() (2001-8-24 14:59:54) 得0分
CString m_Edit.Format("%lf", doubleVar);
GetDlgItem(EditID)->SetWindowText(m_strEdit);
29。該如何把 WINDOWPLACEMENT * 轉(zhuǎn)換成 char **類型??
(char**)&pWP
30。怎樣把CString的類型轉(zhuǎn)換成char*型的?
回復(fù)人: dcz(dcz) (2001-8-19 19:13:27) 得5分
// str is CString var
char* temp = strdup(str);
...
free(temp);
回復(fù)人: yu900(疾風(fēng)之狼) (2001-8-19 19:57:25) 得0分
getbuffer();即可!
回復(fù)人: aileen_long(挑戰(zhàn)2001) (2001-8-19 21:10:35) 得0分
同意樓上的意見!
回復(fù)人: czh912() (2001-8-19 21:27:08) 得0分
char buf[20];
printf(buf,"%s",string);
回復(fù)人: casl(casl) (2001-8-19 22:59:44) 得5分
CString s("abc");
char* temp=s.GetBuffer(10);
...
s.ReleaseBuffer();
回復(fù)人: cocia(高亞) (2001-8-19 23:04:23) 得0分
char* temp=s.GetBuffer(10);
10是什么意思啊
回復(fù)人: kevin_dong(夢仙人) (2001-8-20 10:26:35) 得0分
// str is CString var
char* temp = strdup(str);
// free
free(temp);
我的這段代碼在一個程序中能通過編譯,但是在另外一個中總是出現(xiàn)cannot convert parameter 1 from 'class CString' to 'const char *'的錯誤。str和temp的類型都一樣。這是為什么?
回復(fù)人: dcz(dcz) (2001-8-20 14:13:45) 得0分
you may setting your compiler option to UNICODE, in this case, declare the var:
// str is CString var
_TCHAR* temp = _tcsdup(str);
// free
free(str);
31。SA,SB為兩個結(jié)構(gòu)類型??
SA* A;
SB* B;
(SB*)A->...(調(diào)用函數(shù))
請問此時A的類型,是指向SA還是SB
此時編譯器是生成一個臨時指針嗎?
另外,
B=(SB*)A;此時A又是什么類型???
回復(fù)貼子:
回復(fù)人: ddeng(登登) (2001-8-9 17:13:58) 得0分
A的類型始終是SA *
B的類型始終是SB *
當(dāng)進(jìn)行強(qiáng)制類型轉(zhuǎn)換時使的是臨時指針
回復(fù)人: gold_water(風(fēng)雨無阻) (2001-8-9 17:30:46) 得0分
同意樓上的。
32。char buff[100],char UserName[50][100],怎么將buff的值傳給UserName,是其成為UserName數(shù)組中的某一項呢??
//0=<i<50
strcpy(UserName[i],buff);
回復(fù)人: Ashura(阿修羅) (2001-7-26 10:08:20) 得0分
呵呵,benbensan搶先一步。
回復(fù)人: tuita(斗牛士) (2001-7-26 10:13:22) 得0分
for (i=0;i<100;i++)
*(*(username+x)+i)=*(buffer+i)
其中0《X〈50
benbensan寫的也對
回復(fù)人: kekeke(我是來向大家學(xué)習(xí)的) (2001-7-26 10:24:22) 得0分
那反過來呢?把UserName中的某一項讀出賦值給buff呢?怎么弄?
回復(fù)人: benbensan(笨笨三) (2001-7-26 10:26:53) 得0分
//0=<i<50
strcpy(UserName[i],buff);
回復(fù)人: benbensan(笨笨三) (2001-7-26 10:28:15) 得0分
對不起,能錯了,不過建議你看一下C語言了的指針和數(shù)組
//0=<i<50
strcpy(buff,UserName[i]);
回復(fù)人: jfzsl(剿匪總司令) (2001-7-26 10:32:57) 得0分
好好看看老潭的書先!OK?
回復(fù)人: kekeke(我是來向大家學(xué)習(xí)的) (2001-7-26 10:44:25) 得0分
好。。。。!
33。請問怎樣把SYSTEMTIME類型轉(zhuǎn)換成time_t類型?
SYSTEMTIME st;
GetLocalTime(&st);
CTime tm(st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond);
time_t t = tm.GetTime();
34。unsigned char Exponent[10]; //e
unsigned long eBytes; //e的字節(jié)數(shù)
如何轉(zhuǎn)換成DWord型! ??
用強(qiáng)制類型轉(zhuǎn)換呀
(DWord)eBeytes;
(DWord)Exponent[i];//(0<=i<=10);
回復(fù)人: xjl1980_81(阿龍) (2001-7-26 16:47:29) 得0分
我是說把e轉(zhuǎn)換成DWORD型
也就是說把Exponent中的內(nèi)容轉(zhuǎn)換成DWORD型
回復(fù)人: cloudshadow1(云影) (2001-7-26 17:13:30) 得0分
用強(qiáng)制類型轉(zhuǎn)換就可以了,(DWORD的高24位自動加0)
DWORD Des[10]
for (int i=0;i<11;i++)
Des[i]=Exponent[i];
至于那個ULONG的也是用強(qiáng)制類型軟換就可以了
35。請問怎樣把time_t類型轉(zhuǎn)換成SYSTEMTIME類型?
回復(fù)人: haven(大天) (2001-7-26 17:12:36) 得0分
typedef struct _SYSTEMTIME
typedef long time_t
很明顯不行嘛!
回復(fù)人: facexy(FACE仔) (2001-7-26 17:17:38) 得0分
哎呀,問錯了,前后對象相反了;-(
忙昏了的結(jié)果…………
另外,TO 樓上的:
轉(zhuǎn)換是可以的
struct tm *tblock;
SYSTEMTIME SystemTime;
memset(&SystemTime,0,sizeof(SYSTEMTIME));
tblock=localtime(&timer);
SystemTime.wYear=tblock->tm_year+1900;
SystemTime.wMonth=tblock->tm_mon+1;
SystemTime.wDay=tblock->tm_mday;
SystemTime.wHour=tblock->tm_hour;
SystemTime.wMinute=tblock->tm_min;
SystemTime.wSecond=tblock->tm_sec;
SystemTime.wDayOfWeek=tblock->tm_wday;
return &SystemTime;
回復(fù)人: zjh73(大章魚) (2001-7-26 20:28:28) 得0分
有兩種方法:
1、用CTime類
先用time_t類型構(gòu)造一個CTime對象,再定義一個SYSTEMTIME結(jié)構(gòu),最后用CTime類的成員函數(shù)GetAsSystemTime將時間轉(zhuǎn)換到SYSTEMTIME結(jié)構(gòu)中
即可。
2、用gmtime函數(shù)
gmtime函數(shù)將time_t時間轉(zhuǎn)換到tm結(jié)構(gòu)中并返回一個tm指針,再將tm結(jié)構(gòu)的相對應(yīng)的項賦給SYSTEMTIME相對應(yīng)的項即可,不過用這種方法要注
意這兩種結(jié)構(gòu)在天、星期等方面的記數(shù)方法有點(diǎn)區(qū)別,一個一般從0開始,一個一般從1開始,賦值時要注意校正,還有要注意的是SYSTEMTIME
結(jié)構(gòu)中有一項是毫秒,而time_t是以秒記數(shù)的。
回復(fù)人: zjh73(大章魚) (2001-7-26 20:32:13) 得0分
反過來也可以用Ctime類的方法
就是先用SYSTEMTIME結(jié)構(gòu)構(gòu)造一個CTime對象,在用CTime類中的成員函數(shù)GetTime返回一個對應(yīng)的time_t即可。 36。我現(xiàn)在正在學(xué)習(xí)SDK編程,遇到的問題是:
我定義了一個靜態(tài)長整形變量,
static long lScore=0;
我想把窗口的標(biāo)題換成長整形數(shù)值,用SetWindowText函數(shù)來實現(xiàn),
由于它的第二個參數(shù)要求數(shù)據(jù)類型為 unsigned short *,但用其來實現(xiàn)強(qiáng)制轉(zhuǎn)換時
總是出現(xiàn)編譯錯誤:
cannot convert parameter 2 from 'unsigned short *' to 'const char *'
后來改成來LPCTSTR 來實現(xiàn)強(qiáng)制轉(zhuǎn)換,沒有出現(xiàn)編譯錯誤,但函數(shù)總是執(zhí)行不成功,
請教各位高人,這倒底是怎么回事???
回復(fù)貼子:
回復(fù)人: prog_st(st) (2001-8-4 21:20:07) 得0分
/* ITOA.C: This program converts integers of various
* sizes to strings in various radixes.
*/
#include <stdlib.h>
#include <stdio.h>
void main( void )
{
char buffer[20];
int i = 3445;
long l = -344115L;
unsigned long ul = 1234567890UL;
_itoa( i, buffer, 10 );
printf( "String of integer %d (radix 10): %s/n", i, buffer );
_itoa( i, buffer, 16 );
printf( "String of integer %d (radix 16): 0x%s/n", i, buffer );
_itoa( i, buffer, 2 );
printf( "String of integer %d (radix 2): %s/n", i, buffer );
_ltoa( l, buffer, 16 );
printf( "String of long int %ld (radix 16): 0x%s/n", l,
buffer );
_ultoa( ul, buffer, 16 );
printf( "String of unsigned long %lu (radix 16): 0x%s/n", ul,
buffer );
}
Output
String of integer 3445 (radix 10): 3445
String of integer 3445 (radix 16): 0xd75
String of integer 3445 (radix 2): 110101110101
String of long int -344115 (radix 16): 0xfffabfcd
String of unsigned long 1234567890 (radix 16): 0x499602d2
回復(fù)人: lwg7603(刑滿釋放人員) (2001-8-4 21:36:15) 得0分
TCHAR str[255]={_T('/0')};
_stprintf(str,_T("%d"),lScore);
SetWindowText(hwnd,str);
37。我用socket發(fā)送的的buf中間需要的是 char *類型的數(shù)據(jù),我想將一個 struct 直接轉(zhuǎn)換成 char * 發(fā)過去。
我用
struct ABCD *abcd;
char *buf;
abcd = (ABCD *)calloc(1,sizeof(ABCD));
buf = (char *)calloc(1,sizeof(ABCD));
///
給abcd 中間賦值,其中有多個char[]的值和int 的值
///
memcpy(buf,abcd,sizeof(ABCD));
//strcpy(buf,(char *)abcd);也不可以
sock(host,buf,....);
//sock(host,(char *)buf,...);也不可以
問題就是在這里,這個buf中間的值總是不對,大家知道為什么否。
回復(fù)人: wolf721() (2001-7-30 18:18:34) 得5分
你傳的是個指針值,而不是數(shù)據(jù)
回復(fù)人: kiko_lee(到處瞧瞧) (2001-7-30 18:50:49) 得0分
但是用memcpy這個是將整個數(shù)據(jù)都復(fù)制過去
回復(fù)人: lz_0618(lz_0618) (2001-7-30 19:26:44) 得5分
你用的VC???改成ABCD *abcd;后編譯一點(diǎn)問題也沒有??!
sock(host,buf,....);這不知是什么,自定義函數(shù)?
typedef struct _ABCD
{
int ID;
char Name[10];
}ABCD;
.......
ABCD *abcd;
char *buf;
abcd = (ABCD *)calloc(2,sizeof(ABCD));
buf = (char *)calloc(2,sizeof(ABCD));
///
//給abcd 中間賦值,其中有多個char[]的值和int 的值
abcd[0].ID =1;
abcd[1].ID =2;
///
memcpy(buf,abcd,2*sizeof(ABCD));
strcpy(buf,(char *)abcd);//也不可以
buf中的內(nèi)容也正確?。?/p>
回復(fù)人: kiko_lee(到處瞧瞧) (2001-7-31 8:57:52) 得0分
我按照樓上的兄弟說的,做了一下,但是仍然做不下來,我用
memcpy(buf,abcd,sizeof(ABCD));
中間的abcd,不知道是不是地址的問題。
回復(fù)人: supersusheng(小蘇) (2001-7-31 14:30:42) 得0分
老大,你sizeof()得出的數(shù)值事多大,看看吧。
回復(fù)人: ydogg(灰毛兔) (2001-7-31 14:41:52) 得0分
只能傳遞流數(shù)據(jù),結(jié)構(gòu)是傳遞不過去的。
回復(fù)人: IamNotMan(NorGirl) (2001-7-31 14:50:53) 得5分
我常這么用
ABCD a ;
//給a的各個域賦值(一定不能含有指針項)
char* buff = new char[sizeof(ABCD)];
memcpy(buff,&a,sizeof(ABCD));
//或者 *(ABCD*)buff = a;
.................
如果buff里的數(shù)對,說明問題不在這兒吧
回復(fù)人: zb_china(最后一座水車zb_china新浪) (2001-7-31 15:16:24) 得0分
看不明白
回復(fù)人: eggplant(拉拉) (2001-7-31 15:42:48) 得0分
最好使用memcpy(),因為struct中的值有可能包含零字節(jié),所以strcpy()可能不對,如果傳遞struct,最好把struct的字節(jié)對齊改為以字節(jié)為單位。
回復(fù)人: lvfengxun(lfx) (2001-7-31 16:06:57) 得5分
直接將結(jié)構(gòu)指針作為send的參數(shù)發(fā)就可以了,還用轉(zhuǎn)換什么
有必要在這里討論嗎?
struct AA
{
int a;
char b[100];
};
struct AA aa;
aa.a=11;
strcpy(aa.b,"aaa");
send(hSocket,(char *)(&aa),sizeof(aa),0);
//OK
回復(fù)人: mydewang(mydewang) (2001-7-31 16:33:21) 得0分
其實這里是一個字節(jié)對齊的問題,
比如
struct AA
{
int a;
char b;
};
那么sizeof( struct AA )就不等于5了,而是8了,所以,將這個結(jié)構(gòu)賦值給一個char *,里面會多出一些零...
需要解決這個問題,可以在Project->Setting->Link->Project Options里加上/Zp1
另外,可以參考一下MSDN里/Zp的編譯選項.....
回復(fù)人: lz_0618(lz_0618) (2001-7-31 19:43:54) 得0分
根本不是什么字節(jié)對齊的問題,我上面的程序經(jīng)過測試都好用啊,這位老兄用我的那段程序究竟是什么錯誤,能說清楚點(diǎn)嗎???
我這邊用socket發(fā)送結(jié)構(gòu)是一點(diǎn)問題也沒有啊,而且是在VC和Delphi編的程序間通訊,當(dāng)然,這時應(yīng)該注意字節(jié)對齊的問題了,在VC程序間,
只要不是故意將服務(wù)器和客戶端的編譯環(huán)境設(shè)的不一樣,肯定是沒有什么問題的,最多是多傳幾個Bit罷了。
回復(fù)人: kiko_lee(到處瞧瞧) (2001-8-3 11:02:51) 得0分
我發(fā)現(xiàn)將char * memcpy 到 char * 中間都有點(diǎn)問題,但是如果放到 char []中間就可以了,大家知道為什么否?
回復(fù)人: ydogg(灰毛兔) (2001-8-3 11:40:35) 得0分
memcpy不copy最后的'/0'...
回復(fù)人: wenjunlin2000(微軟克星) (2001-8-3 14:32:17) 得0分
是你看錯了
因為char*是以0 結(jié)尾的
回復(fù)人: mc_music(狂沙) (2001-8-3 15:07:21) 得0分
請注意我的程序:
struct ABCD *abcd;
char *buf;
abcd = (ABCD *)calloc(1,sizeof(ABCD));
//初始化abcd
buf=abcd;//指針直接符值就可以了
回復(fù)人: zhangnanonnet(WinSockZhang) (2001-8-3 16:21:03) 得0分
你試試把類型變?yōu)锽YTE
回復(fù)人: kiko_lee(到處瞧瞧) (2001-8-7 9:21:08) 得0分
不管了,給分,大家都有不少的建議呢。
38。double dou=12.34;我如何可以得到char * ch="12.34";轉(zhuǎn)換函數(shù)是什么?
回復(fù)人: wyzegg(蛋) (2001-7-24 21:26:04) 得50分
double dou=12.34;
char * ch;
ch=malloc(100);
sprintf(ch,"%5.2f",dou);
回復(fù)人: wyzegg(蛋) (2001-7-24 21:28:24) 得0分
或者
#include <stdlib.h>
#include <stdio.h>
void main( void )
{
int decimal, sign;
char *buffer;
int precision = 10;
double source = 3.1415926535;
buffer = _ecvt( source, precision, &decimal, &sign );
printf( "source: %2.10f buffer: '%s' decimal: %d sign: %d/n",
source, buffer, decimal, sign );
}
但是第一種常用
回復(fù)人: Matrix_w(學(xué)會一點(diǎn)點(diǎn)) (2001-7-24 21:32:43) 得30分
int decimal, sign;
double dou =12.34;
char* ch;
ch = _ecvt(dou,4,&decimal,&sign);
回復(fù)人: imhua(華弟) (2001-7-24 21:35:02) 得20分
double dou=12.34;
char *str;
gcvt(dou,5,str); //5是長度
MessageBox(str);
回復(fù)人: Matrix_w(學(xué)會一點(diǎn)點(diǎn)) (2001-7-24 21:37:58) 得0分
/* _GCVT.C: This program converts -3.1415e5
* to its string representation.
*/
#include <stdlib.h>
#include <stdio.h>
void main( void )
{
char buffer[50];
double source = -3.1415e5;
_gcvt( source, 7, buffer );
printf( "source: %f buffer: '%s'/n", source, buffer );
_gcvt( source, 7, buffer );
printf( "source: %e buffer: '%s'/n", source, buffer );
}
Output
source: -314150.000000 buffer: '-314150.'
source: -3.141500e+005 buffer: '-314150.'
39。 我在ADO中調(diào)用一個存儲過程,存儲過程有三個輸入?yún)?shù)@useradd char(30),@username char(10),@userage char(3),現(xiàn)在要把char
*addr,char *name,char *age分別賦值給他們。??
我做了如下定義:
_ParameterPtr para1;
_variant_t var1,var2,var3;
==============================================================
var1.vt=VT_BSTR;
var1.bstrval=addr;/////(編譯錯誤)
==============================================================
para1=m_pCommand->CreateParameter(L"useradd",adBSTR,adParamInput,30,var1);
m_pCommand->Parameters->Append(para1);
編譯結(jié)果出現(xiàn)下面錯誤:
cannot convert from 'char *' to 'unsigned short *
不知道類型是不是選擇VT_BSTR?
回復(fù)人:tar(GPS) (2001-7-12 18:49:05) 得15分
var1.bstrval應(yīng)該指向?qū)捵址淖址?br />即unicode字符串
use _bstr_t to convert it
_bstr_t var1(addr);
回復(fù)人:happyhackwang() (2001-7-12 20:06:48) 得5分
char *要進(jìn)行轉(zhuǎn)換成BSTR
回復(fù)人:WhiteWaterBlueSky(瘋狂數(shù)碼) (2001-7-13 9:35:15) 得10分
SDK中是這樣的
1。先用MultiByteToWideChar把char* 轉(zhuǎn)為wchar_t*
2。再用SysAllocString把wchar_t*轉(zhuǎn)為BSTR
回復(fù)人:tar(GPS) (2001-7-13 14:10:01) 得0分
faint,我都已經(jīng)把語句寫出來了
_bstr_t a(addr);
var1.vt=VT_BSTR;
var1.bstrval=(wchar_t *)a;
回復(fù)人:xwchena(西風(fēng)之神) (2001-7-13 15:57:00) 得0分
大哥,我改完之后記錄集無結(jié)果返回。我的代碼是這樣的:
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset=m_pCommand->Execute(NULL,NULL,adCmdStoredProc);
if(!m_pRecordset->adoEOF)
{
result1=m_pRecordset->GetCollect((long)0);
if(result1.vt!=NULL)
{
result1.ChangeType(VT_BSTR);
CString strResult1=result1.bstrVal;
strcpy(resval,strResult1);
}
調(diào)試的時候看到執(zhí)行完m_pCommand->Execute()后m_pRecordset就到了記錄集的尾部
而如果把char*型都改成int型,結(jié)果就能返回記錄集。
這是為什么?。???
回復(fù)人:tar(GPS) (2001-7-13 19:19:51) 得0分
try adVarChar
回復(fù)人:xwchena(西風(fēng)之神) (2001-7-13 22:54:21) 得0分
還是不行,記錄集沒有返回結(jié)果
回復(fù)人:seesi(不是我想騙你,是我不知道怎么才能不騙!) (2001-7-14 0:24:36)
40。如何將 BSTR pVal 賦給:unsigned char *pw;如何將:unsigned char digest[16]賦給 BSTR *pOutVal?
USES_CONVERSION;
*pOutVal=SysAllocString(A2W((LPTSTR)digest));
unsigned char *pw = (unsigned char *)_com_util::ConvertBSTRToString(pInVal);
相關(guān)文章
c# 實現(xiàn)獲取漢字十六進(jìn)制Unicode編碼字符串的實例
下面小編就為大家?guī)硪黄猚# 實現(xiàn)獲取漢字十六進(jìn)制Unicode編碼字符串的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01位運(yùn)算實現(xiàn)十進(jìn)制轉(zhuǎn)換為二進(jìn)制
這篇文章主要介紹了位運(yùn)算實現(xiàn)十進(jìn)制轉(zhuǎn)換為二進(jìn)制的相關(guān)資料,需要的朋友可以參考下2015-03-03C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式代碼示例
數(shù)組元素和數(shù)組名都可以作為函數(shù)的參數(shù)以實現(xiàn)函數(shù)間數(shù)據(jù)的傳遞和共享,下面這篇文章主要給大家介紹了關(guān)于C++中數(shù)組作為函數(shù)參數(shù)傳入的幾種方式,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06C++?opencv利用grabCut算法實現(xiàn)摳圖示例
這篇文章主要為大家介紹了C++?opencv利用grabCut算法實現(xiàn)摳圖的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05