⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vc常用数据类型使用转换详解.txt

📁 VC常用数据类型使用转换详解,在网上载下来的,很有用,提供给大家
💻 TXT
📖 第 1 页 / 共 4 页
字号:
benbensan写的也对

回复人: kekeke(我是来向大家学习的) (2001-7-26 10:24:22) 得0分 
那反过来呢?把UserName中的某一项读出赋值给buff呢?怎么弄? 
回复人: benbensan(笨笨三) (2001-7-26 10:26:53) 得0分 
//0= strcpy(UserName[i],buff); 
回复人: benbensan(笨笨三) (2001-7-26 10:28:15) 得0分 
对不起,能错了,不过建议你看一下C语言了的指针和数组
//0= strcpy(buff,UserName[i]); 

回复人: jfzsl(剿匪总司令) (2001-7-26 10:32:57) 得0分 
好好看看老潭的书先!OK? 
回复人: kekeke(我是来向大家学习的) (2001-7-26 10:44:25) 得0分 
好。。。。! 

33。请问怎样把SYSTEMTIME类型转换成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的字节数
如何转换成DWord型! ??

用强制类型转换呀
(DWord)eBeytes;
(DWord)Exponent[i];//(0<=i<=10);

回复人: xjl1980_81(阿龙) (2001-7-26 16:47:29) 得0分 
我是说把e转换成DWORD型
也就是说把Exponent中的内容转换成DWORD型

回复人: cloudshadow1(云影) (2001-7-26 17:13:30) 得0分 
用强制类型转换就可以了,(DWORD的高24位自动加0)
DWORD Des[10]
for (int i=0;i<11;i++)
Des[i]=Exponent[i];
至于那个ULONG的也是用强制类型软换就可以了

35。请问怎样把time_t类型转换成SYSTEMTIME类型?
回复人: haven(大天) (2001-7-26 17:12:36) 得0分 
typedef struct _SYSTEMTIME
typedef long time_t
很明显不行嘛! 
回复人: facexy(FACE仔) (2001-7-26 17:17:38) 得0分 
哎呀,问错了,前后对象相反了;-(
忙昏了的结果…………

另外,TO 楼上的:
转换是可以的
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; 
回复人: zjh73(大章鱼) (2001-7-26 20:28:28) 得0分 
有两种方法:
1、用CTime类
先用time_t类型构造一个CTime对象,再定义一个SYSTEMTIME结构,最后用CTime类的成员函数GetAsSystemTime将时间转换到SYSTEMTIME结构中
即可。
2、用gmtime函数
gmtime函数将time_t时间转换到tm结构中并返回一个tm指针,再将tm结构的相对应的项赋给SYSTEMTIME相对应的项即可,不过用这种方法要注
意这两种结构在天、星期等方面的记数方法有点区别,一个一般从0开始,一个一般从1开始,赋值时要注意校正,还有要注意的是SYSTEMTIME
结构中有一项是毫秒,而time_t是以秒记数的。 
回复人: zjh73(大章鱼) (2001-7-26 20:32:13) 得0分 
反过来也可以用Ctime类的方法
就是先用SYSTEMTIME结构构造一个CTime对象,在用CTime类中的成员函数GetTime返回一个对应的time_t即可。 36。我现在正在学习SDK编程,遇到的问题是:
我定义了一个静态长整形变量,
static long lScore=0;
我想把窗口的标题换成长整形数值,用SetWindowText函数来实现,
由于它的第二个参数要求数据类型为 unsigned short *,但用其来实现强制转换时
总是出现编译错误:
cannot convert parameter 2 from 'unsigned short *' to 'const char *'
后来改成来LPCTSTR 来实现强制转换,没有出现编译错误,但函数总是执行不成功,
请教各位高人,这倒底是怎么回事???

回复贴子: 
回复人: prog_st(st) (2001-8-4 21:20:07) 得0分 
/* ITOA.C: This program converts integers of various
* sizes to strings in various radixes.
*/

#i nclude 
#i nclude 

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


回复人: lwg7603(刑满释放人员) (2001-8-4 21:36:15) 得0分 
TCHAR str[255]={_T('\0')};
_stprintf(str,_T("%d"),lScore);
SetWindowText(hwnd,str);

37。我用socket发送的的buf中间需要的是 char *类型的数据,我想将一个 struct 直接转换成 char * 发过去。
我用
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中间的值总是不对,大家知道为什么否。

回复人: wolf721() (2001-7-30 18:18:34) 得5分 
你传的是个指针值,而不是数据 
回复人: kiko_lee(到处瞧瞧) (2001-7-30 18:50:49) 得0分 
但是用memcpy这个是将整个数据都复制过去 
回复人: lz_0618(lz_0618) (2001-7-30 19:26:44) 得5分 
你用的VC???改成ABCD *abcd;后编译一点问题也没有啊!
sock(host,buf,....);这不知是什么,自定义函数?

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中的内容也正确!!

回复人: kiko_lee(到处瞧瞧) (2001-7-31 8:57:52) 得0分 
我按照楼上的兄弟说的,做了一下,但是仍然做不下来,我用
memcpy(buf,abcd,sizeof(ABCD));
中间的abcd,不知道是不是地址的问题。 
回复人: supersusheng(小苏) (2001-7-31 14:30:42) 得0分 
老大,你sizeof()得出的数值事多大,看看吧。 
回复人: ydogg(灰毛兔) (2001-7-31 14:41:52) 得0分 
只能传递流数据,结构是传递不过去的。 
回复人: 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里的数对,说明问题不在这儿吧

回复人: zb_china(最后一座水车zb_china新浪) (2001-7-31 15:16:24) 得0分 
看不明白 
回复人: eggplant(拉拉) (2001-7-31 15:42:48) 得0分 
最好使用memcpy(),因为struct中的值有可能包含零字节,所以strcpy()可能不对,如果传递struct,最好把struct的字节对齐改为以字节为单位。 
回复人: lvfengxun(lfx) (2001-7-31 16:06:57) 得5分 
直接将结构指针作为send的参数发就可以了,还用转换什么
有必要在这里讨论吗?
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 
回复人: mydewang(mydewang) (2001-7-31 16:33:21) 得0分 
其实这里是一个字节对齐的问题,
比如
struct AA
{
int a;
char b;
};
那么sizeof( struct AA )就不等于5了,而是8了,所以,将这个结构赋值给一个char *,里面会多出一些零...

需要解决这个问题,可以在Project->Setting->Link->Project Options里加上/Zp1

另外,可以参考一下MSDN里/Zp的编译选项..... 
回复人: lz_0618(lz_0618) (2001-7-31 19:43:54) 得0分 
根本不是什么字节对齐的问题,我上面的程序经过测试都好用啊,这位老兄用我的那段程序究竟是什么错误,能说清楚点吗???

我这边用socket发送结构是一点问题也没有啊,而且是在VC和Delphi编的程序间通讯,当然,这时应该注意字节对齐的问题了,在VC程序间,
只要不是故意将服务器和客户端的编译环境设的不一样,肯定是没有什么问题的,最多是多传几个Bit罢了。 
回复人: kiko_lee(到处瞧瞧) (2001-8-3 11:02:51) 得0分 
我发现将char * memcpy 到 char * 中间都有点问题,但是如果放到 char []中间就可以了,大家知道为什么否? 
回复人: ydogg(灰毛兔) (2001-8-3 11:40:35) 得0分 
memcpy不copy最后的'\0'... 
回复人: wenjunlin2000(微软克星) (2001-8-3 14:32:17) 得0分 
是你看错了
因为char*是以0 结尾的

回复人: mc_music(狂沙) (2001-8-3 15:07:21) 得0分 
请注意我的程序:
struct ABCD *abcd;
char *buf;
abcd = (ABCD *)calloc(1,sizeof(ABCD));
//初始化abcd
buf=abcd;//指针直接符值就可以了 
回复人: zhangnanonnet(WinSockZhang) (2001-8-3 16:21:03) 得0分 
你试试把类型变为BYTE 
回复人: kiko_lee(到处瞧瞧) (2001-8-7 9:21:08) 得0分 
不管了,给分,大家都有不少的建议呢。 


38。double dou=12.34;我如何可以得到char * ch="12.34";转换函数是什么?

回复人: wyzegg(蛋) (2001-7-24 21:26:04) 得50分 
double dou=12.34;
char * ch;
ch=malloc(100);
sprintf(ch,"%5.2f",dou); 
回复人: wyzegg(蛋) (2001-7-24 21:28:24) 得0分 
或者
#i nclude 
#i nclude 

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 );
}

但是第一种常用 
回复人: Matrix_w(学会一点点) (2001-7-24 21:32:43) 得30分 
int decimal, sign;
double dou =12.34;
char* ch;
ch = _ecvt(dou,4,&decimal,&sign);

回复人: imhua(华弟) (2001-7-24 21:35:02) 得20分 
double dou=12.34;
char *str;
gcvt(dou,5,str); //5是长度
MessageBox(str); 
回复人: Matrix_w(学会一点点) (2001-7-24 21:37:58) 得0分 
/* _GCVT.C: This program converts -3.1415e5
* to its string representation.
*/

#i nclude 
#i nclude 

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中调用一个存储过程,存储过程有三个输入参数@useradd char(30),@username char(10),@userage char(3),现在要把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);
编译结果出现下面错误:
cannot convert from 'char *' to 'unsigned short *
不知道类型是不是选择VT_BSTR?
回复人:tar(GPS) (2001-7-12 18:49:05) 得15分 
var1.bstrval应该指向宽字符的字符串,
即unicode字符串
use _bstr_t to convert it

_bstr_t var1(addr);

 回复人:happyhackwang() (2001-7-12 20:06:48) 得5分 
char *要进行转换成BSTR

 回复人:WhiteWaterBlueSky(疯狂数码) (2001-7-13 9:35:15) 得10分 
SDK中是这样的
1。先用MultiByteToWideChar把char* 转为wchar_t*
2。再用SysAllocString把wchar_t*转为BSTR 

 回复人:tar(GPS) (2001-7-13 14:10:01) 得0分 
faint,我都已经把语句写出来了
_bstr_t a(addr);
var1.vt=VT_BSTR;
var1.bstrval=(wchar_t *)a; 

 回复人:xwchena(西风之神) (2001-7-13 15:57:00) 得0分 
大哥,我改完之后记录集无结果返回。我的代码是这样的:
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);
}
调试的时候看到执行完m_pCommand->Execute()后m_pRecordset就到了记录集的尾部
而如果把char*型都改成int型,结果就能返回记录集。
这是为什么啊???

 回复人:tar(GPS) (2001-7-13 19:19:51) 得0分 
try adVarChar 
 回复人:xwchena(西风之神) (2001-7-13 22:54:21) 得0分 
还是不行,记录集没有返回结果 
 回复人: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); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -