VC 字符串的相互转换 CString 和 unsigned char*

string 转 CString 
CString.format("%s", string.c_str()); 

char 转 CString 
CString.format("%s", char*); 

char 转 string 
string s(char *); 

string 转 char * 
char *p = string.c_str(); 

CString 转 string 
string s(CString.GetBuffer()); 

1,string -> CString 
CString.format("%s", string.c_str()); 
用c_str()确实比data()要好. 
2,char -> string 
string s(char *); 
你的只能初始化,在不是初始化的地方最好还是用assign(). 
3,CString -> string 
string s(CString.GetBuffer()); 
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间. 


《C++标准函数库》中说的 
有三个函数可以将字符串的内容转换为字符数组和C—string 
1.data(),返回没有”\0“的字符串数组 
2,c_str(),返回有”\0“的字符串数组 
3,copy() 

--------------------------------------------------------------- 

CString与int、char*、char[100]之间的转换- - 


CString与int、char*、char[100]之间的转换- - 

 

CString互转int 

将字符转换为整数,可以使用atoi、_atoi64或atol。 
而将数字转换为CString变量,可以使用CString的Format函数。如 
CString s; 
int i = 64; 
s.Format("%d", i) 
Format函数的功能很强,值得你研究一下。 

void CStrDlg::OnButton1() 

// TODO: Add your control notification handler code here 
CString 
ss="1212.12"; 
int temp=atoi(ss); 
CString aa; 
aa.Format("%d",temp); 
AfxMessageBox("var is " + aa); 

sart.Format("%s",buf); 

CString互转char* 

///char * TO cstring 
CString strtest; 
char * charpoint; 
charpoint="give string a value"; 
strtest=charpoint; 


///cstring TO char * 
charpoint=strtest.GetBuffer(strtest.GetLength()); 

标准C里没有string,char *==char []==string 

可以用CString.Format("%s",char *)这个方法来将char *转成CString。

要把CString转成char *,用操作符(unsigned char*)(LPCSTR)CString就可以了。 

 

CString转换 unsigned char*

unsigned char*  a;

CString st("test");

a = (unsigned char *)(LPCSTR) st;


CString转换 char[100] 

char a[100]; 
CString str("aaaaaa"); 
strncpy(a,(LPCTSTR)str,sizeof(a));

 

http://hsw625728.blog.163.com/blog/static/39570728200831043741857/

<think>好的,用户的问题是关于在C++中将字符串转换为IP地址的示例代码,特别是VC++环境。首先,我需要回忆相关的知识,并查看提供的引用内容。 根据引用[1],用户提到了使用CIPAddressCtrl控件inet_addr函数进行转换。引用[2]讨论了ip地址与int类型的转换,引用[3][4]则涉及判断字符串是否为合法IP地址。用户的需求可能包括转换验证两部分。 首先,字符串转IP地址的常见方法有使用inet_addr函数,该函数将点分十进制的IP字符串转换为DWORD类型的网络字节顺序。但需要注意inet_addr的返回值是否为INADDR_NONE,以判断转换是否成功。此外,引用[1]中的示例代码展示了如何在MFC中使用CIPAddressCtrl控件显示IP地址,这可能对用户有帮助。 其次,用户可能需要将转换后的DWORD分解为四个字节,以便在控件中显示或处理。例如,使用unsigned char指针逐个访问每个字节,注意字节顺序的问题,因为网络字节顺序是大端模式,而本地存储可能是小端,因此需要调整顺序。 另外,合法性验证是关键步骤。如引用[3][4]所提到的,需要检查字符串的格式是否为四个0-255之间的数字,用点分隔。这可以通过分割字符串并逐一检查每个部分来实现。 在编写示例代码时,应该包括以下几个步骤: 1. 使用inet_addr进行初步转换,并检查结果是否为INADDR_NONE。 2. 将DWORD分解为四个字节,可能需要调整字节顺序。 3. 使用CIPAddressCtrl控件来显示或获取IP地址。 4. 验证输入字符串的合法性,确保每个部分在0-255之间且格式正确。 需要注意的是,inet_addr无法处理某些非标准格式(如前导零),因此可能需要自定义解析函数,如引用[4]中提到的逐个字符分析的方法。但用户可能更倾向于使用库函数,除非明确要求不使用库函数。 最后,用户可能需要代码示例,所以需要提供完整的MFC示例,包括如何转换字符串到DWORD,分解为四个字节,并设置到CIPAddressCtrl控件中。同时,提醒错误处理的重要性,比如无效字符串的处理。</think>在C++中将字符串转换为IP地址可通过以下方法实现,这里提供VC++环境下的两种典型实现方式: ### 一、使用Windows套接字库函数 ```cpp #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") CString strIP = _T("192.168.1.1"); DWORD dwIP = inet_addr(CT2A(strIP.GetBuffer())); if (dwIP == INADDR_NONE) { // 非法IP地址处理 } // 转换为4个字节 BYTE b1 = (dwIP >> 24) & 0xFF; BYTE b2 = (dwIP >> 16) & 0xFF; BYTE b3 = (dwIP >> 8) & 0xFF; BYTE b4 = dwIP & 0xFF; // 设置到IP控件 CIPAddressCtrl m_ipAddr; m_ipAddr.SetAddress(b1, b2, b3, b4); ``` 该方法直接使用Windows API函数`inet_addr`进行转换[^1][^2]。 ### 二、手动解析实现(避免依赖库) ```cpp bool StringToIP(const CString& strIP, BYTE& b1, BYTE& b2, BYTE& b3, BYTE& b4) { int n1, n2, n3, n4; if (_stscanf_s(strIP, _T("%d.%d.%d.%d"), &n1, &n2, &n3, &n4) != 4) return false; if (n1<0 || n1>255 || n2<0 || n2>255 || n3<0 || n3>255 || n4<0 || n4>255) return false; b1 = (BYTE)n1; b2 = (BYTE)n2; b3 = (BYTE)n3; b4 = (BYTE)n4; return true; } ``` 该方法通过字符串分割数值范围验证实现[^4]。 ### 三、IP地址合法性验证要点 1. 必须包含4个整数段 2. 每个数值范围0-255 3. 禁止包含前导零(如"010.0.0.1") 4. 禁止出现非数字字符[^3]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值