各种字符串相互转换


从网上搜罗,可在vs2010下运行,管用


#include   <afx.h>
#include  <conio.h>
#include  <string>
using namespace std;


char * trans(CString strServIp)
{
char szIpAddr[16] = {0};
USES_CONVERSION;  //声明这个宏,才能用T2A
strcpy(szIpAddr, T2A(strServIp));    //或者(LPTSTR)(LPCTSTR)strServIp 或者用 CString GetBuffer函数
return szIpAddr; //返回的临时变量地址
}

//使用API:WideCharToMultiByte进行转换
void  trans1(char * deststr, CString str)
{
//注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的
int n = str.GetLength();
//获取宽字节字符的大小,大小是按字节计算的
int len = WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),NULL,0,NULL,NULL);
//为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小
//宽字节编码转换成多字节编码
WideCharToMultiByte(CP_ACP,0,str,str.GetLength(),deststr,len,NULL,NULL);
deststr[len+1] = '\0';   //多字节字符以'\0'结束
}

void trans2(char * deststr, CString str)
{
//声明标识符
USES_CONVERSION;
//调用函数,T2A和W2A均支持ATL和MFC中的字符转换
deststr = T2A(str);  
//deststr = W2A(str);  //也可实现转换
}

//char 2 CString
void char2CString(char * srcstr, CString &deststr)
{
//计算char *数组大小,以字节为单位,一个汉字占两个字节
int charLen = strlen(srcstr);
//计算多字节字符的大小,按字符计算。
int len = MultiByteToWideChar(CP_ACP,0,srcstr,charLen,NULL,0);
//为宽字节字符数组申请空间,数组大小为按字节计算的多字节字符大小
TCHAR *buf = new TCHAR[len + 1];
//多字节编码转换成宽字节编码
MultiByteToWideChar(CP_ACP,0,srcstr,charLen,buf,len);
buf[len] = '\0';  //添加字符串结尾,注意不是len+1


//将TCHAR数组转换为CString
deststr.Append(buf);
//删除缓冲区
delete []buf;
}

void char2CString2(char * srcstr, CString &deststr)
{
USES_CONVERSION;
deststr = A2T(srcstr);
}


void main()
{
const char * ret;
ret = trans(_T("sdfsdf")); //ret指向临时地址
char char_str[50] = {0};
strcpy(char_str, ret);
printf("%s\n", char_str);  //1

trans1(char_str,  _T("D:\\校内项目\\QQ.bmp"));
printf("%s\n", char_str);  //2

trans1(char_str,  _T("D:\\校内项目\\QQ.bmp"));
printf("%s\n", char_str);  //3

CString retstr;
char2CString("D:\\校内项目\\QQ.bmp", retstr);
USES_CONVERSION;
printf("%s\n", T2A(retstr));  //4
retstr.ReleaseBuffer();

char2CString2("D:\\校内项目\\QQ.bmp", retstr);
printf("%s\n", T2A(retstr));  //5

//CString to string
CString cs("Hello 哈哈哈");
CT2CA pszConvertedAnsiString (cs);  // Convert a TCHAR string to a LPCSTR
std::string strStd (pszConvertedAnsiString);  // construct a std::string using the LPCSTR input
printf("%s\n", strStd.c_str());  //6

//string to CString
strStd = "sdfsdf哈罗";
    retstr.Format( A2T(strStd.c_str()) );  //用c_str()确实比data()要好.  
printf("%s\n", T2A(retstr) );  //6

while( !_kbhit() );

}



内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
<think>好的,用户想了解如何在字符数组和字符串之间进行相互转换。我需要根据提供的引用资料,整理不同编程语言中的方法。 首先,查看每个引用中的信息。引用3、4、5分别提到了Java、C#和C++的方法,还有JS的引用2。我需要分语言整理,确保每个步骤清晰。 Java方面,引用3提到了两种方法:使用String构造函数String.valueOf。需要详细说明这两种方式,并给出示例代码。同时,引用1中的ArrayUtils可能不是标准库,需要指出。 对于C#,引用4提到了三种方法:Join、Concat和new string。要说明每种方法的区别,并推荐使用构造方法。 C++的情况在引用5中,用string的构造函数将字符数组转字符串,而字符串转字符数组则需要逐个复制或使用c_str(),但要注意安全性。 JS方面,引用2提到join()方法,可以将数组元素连接成字符串,而字符串转数组可以用split()。这部分需要补充进去,虽然用户没有直接问JS,但可能对其他语言用户有帮助。 还要注意不同语言之间的差异,比如Java和C#的构造函数使用方式不同。另外,要提醒用户注意字符数组的结束符,特别是在C++中使用gets_s的情况。 最后,确保回答结构清晰,分语言说明,每个方法都有示例,并引用对应的资料。可能还需要在相关问题中引导用户了解更多优化或应用场景。</think>### 字符数组与字符串相互转换方法 #### 1. **Java** - **字符数组 → 字符串** 1. **使用 `String` 构造函数** ```java char[] charArray = {'h', 'e', 'l', 'l', 'o'}; String str = new String(charArray); // 输出: hello ``` 2. **使用 `String.valueOf` 方法** ```java String str = String.valueOf(charArray); // 等同于 new String(charArray) ``` 3. **使用 `ArrayUtils.toString`(需第三方库)** ```java String str2 = ArrayUtils.toString(arr, ","); // 输出格式: {h,e,l,l,o} [^1] ``` - **字符串 → 字符数组** ```java String str = "hello"; char[] charArray = str.toCharArray(); // 结果: {'h','e','l','l','o'} ``` #### 2. **C#** - **字符数组 → 字符串** 1. **使用 `string.Concat`** ```csharp string str = string.Concat<char>(tempChar); // 直接拼接字符数组 ``` 2. **使用 `string.Join`(空分隔符)** ```csharp string str = string.Join("", tempChar); // 效果等同于拼接[^4] ``` 3. **使用 `new string` 构造函数(推荐)** ```csharp string str = new string(tempChar); // 直接构造字符串 ``` - **字符串 → 字符数组** ```csharp string str = "hello"; char[] charArray = str.ToCharArray(); // 结果: {'h','e','l','l','o'} ``` #### 3. **C++** - **字符数组 → 字符串** ```cpp char test[50] = "hello"; string testString = test; // 直接赋值转换[^5] ``` - **字符串 → 字符数组** ```cpp string testString = "hello"; char test2[50]; strcpy(test2, testString.c_str()); // 使用 strcpy 安全拷贝 // 或逐字符复制 for (int i=0; i < testString.size(); i++) { test2[i] = testString[i]; } ``` #### 4. **JavaScript** - **数组 → 字符串** ```javascript const arr = ['h','e','l','l','o']; const str = arr.join(''); // 输出: "hello" [^2] ``` - **字符串 → 数组** ```javascript const str = "hello"; const arr = str.split(''); // 结果: ['h','e','l','l','o'] ``` --- ### 关键注意事项 1. **内存安全性(C/C++)**:需确保字符数组长度足够,避免溢出。 2. **编码差异**:中文字符可能需要考虑多字节编码(如UTF-8)。 3. **性能优化**:直接构造(如Java的`new String`或C#的`new string`)通常效率更高[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值