c++中string和char*的类型转换
阅读数:198 评论数:0
跳转到新版页面分类
C/C++
正文
一、string转char*
1、c_str()方法
string str="world";
const char* p = str.c_str();// 加const或等号右边用char*
2、data()方法
string str = "hello";
const char* p = str.data();
3、copy()方法
string str="qweqwe";
char data[30];
str.copy(data,3,0);// 0表示复制开始的位置,3代表复制的字符个数
二、char* 转string
string s;
char *p = "hello";
s = p;
三、string的常用方式
1、创建和初始化
#include <iostream>
#include <string>
int main() {
std::string str1; // 默认构造函数,创建一个空字符串
std::string str2("Hello, World!"); // 使用C字符串初始化
std::string str3 = "Hello, C++!"; // 使用字符串字面量初始化
std::string str4(str2); // 拷贝构造函数
std::string str5(10, 'A'); // 创建一个包含10个'A'字符的字符串
std::cout << "str1: " << str1 << std::endl;
std::cout << "str2: " << str2 << std::endl;
std::cout << "str3: " << str3 << std::endl;
std::cout << "str4: " << str4 << std::endl;
std::cout << "str5: " << str5 << std::endl;
return 0;
}
2、访问和修改字符
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, World!";
// 访问字符串中的字符
char firstChar = str[0];
char lastChar = str.at(str.size() - 1);
std::cout << "First character: " << firstChar << std::endl;
std::cout << "Last character: " << lastChar << std::endl;
// 修改字符串中的字符
str[7] = 'C';
str.at(8) = '+';
std::cout << "Modified string: " << str << std::endl;
return 0;
}
3、字符串的连接
#include <iostream>
#include <string>
int main() {
std::string str1 = "Hello, ";
std::string str2 = "World!";
// 使用加号操作符连接字符串
std::string str3 = str1 + str2;
std::cout << "Concatenated string: " << str3 << std::endl;
// 使用append函数连接字符串
str1.append(str2);
std::cout << "Appended string: " << str1 << std::endl;
return 0;
}
4、查找和替换
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, World!";
// 查找子串
std::size_t pos = str.find("World");
if (pos != std::string::npos) {
std::cout << "'World' found at position: " << pos << std::endl;
} else {
std::cout << "'World' not found" << std::endl;
}
// 提取子串
std::string subStr = str.substr(7, 5);
std::cout << "Substring: " << subStr << std::endl;
// 替换子串
str.replace(7, 5, "C++");
std::cout << "Replaced string: " << str << std::endl;
return 0;
}
5、字符串比较
#include <iostream>
#include <string>
int main() {
std::string str1 = "Hello";
std::string str2 = "World";
std::string str3 = "Hello";
// 使用比较操作符
if (str1 == str3) {
std::cout << "str1 is equal to str3" << std::endl;
}
if (str1 != str2) {
std::cout << "str1 is not equal to str2" << std::endl;
}
// 使用compare函数
if (str1.compare(str2) < 0) {
std::cout << "str1 is less than str2" << std::endl;
} else if (str1.compare(str2) > 0) {
std::cout << "str1 is greater than str2" << std::endl;
} else {
std::cout << "str1 is equal to str2" << std::endl;
}
return 0;
}
6、字符串长度和清空
#include <iostream>
#include <string>
int main() {
std::string str = "Hello, World!";
// 获取字符串长度
std::cout << "Length: " << str.size() << std::endl;
std::cout << "Length: " << str.length() << std::endl;
// 检查字符串是否为空
if (!str.empty()) {
std::cout << "String is not empty" << std::endl;
}
// 清空字符串
str.clear();
if (str.empty()) {
std::cout << "String is empty after clear" << std::endl;
}
return 0;
}
四、char字节操作
1、4字节转int
#include <iostream>
#include <cstdint>
// 枚举类型用于表示字节序
enum Endianness {
LITTLE_ENDIAN,
BIG_ENDIAN
};
// 检查系统的字节序
Endianness checkSystemEndianness() {
uint32_t value = 0x1;
char *bytePtr = reinterpret_cast<char*>(&value);
return bytePtr[0] == 1 ? LITTLE_ENDIAN : BIG_ENDIAN;
}
// 将 char[4] 转换为 int 的函数
int charArrayToInt(const char buffer[4], Endianness endianness) {
uint32_t value = 0;
if (endianness == LITTLE_ENDIAN) {
value = static_cast<uint8_t>(buffer[0]) |
(static_cast<uint8_t>(buffer[1]) << 8) |
(static_cast<uint8_t>(buffer[2]) << 16) |
(static_cast<uint8_t>(buffer[3]) << 24);
} else { // BIG_ENDIAN
value = static_cast<uint8_t>(buffer[3]) |
(static_cast<uint8_t>(buffer[2]) << 8) |
(static_cast<uint8_t>(buffer[1]) << 16) |
(static_cast<uint8_t>(buffer[0]) << 24);
}
return static_cast<int>(value);
}
int main() {
// 示例字节数组
char buffer[4] = {0x01, 0x02, 0x03, 0x04};
// 检查系统字节序
Endianness systemEndianness = checkSystemEndianness();
std::cout << "系统字节序: " << (systemEndianness == LITTLE_ENDIAN ? "小端序" : "大端序") << std::endl;
// 将 char[4] 转换为 int
int value = charArrayToInt(buffer, systemEndianness);
std::cout << "转换后的整数: " << value << std::endl;
return 0;
}
- 大端序(Big Endian):最高有效字节(Most Significant Byte, MSB)存储在最低地址。
- 小端序(Little Endian):最低有效字节(Least Significant Byte, LSB)存储在最低地址。
相关推荐
第1章 认识对象
1.面向对象分析(object-oriented analysis,OOA)的主要任务是分析问题域中的对象、对象之间的关系,然后构造出该问题域的分析模型。分析模型必须简洁、明确地抽象
第一章 C++初步认识
C++对C的“增强”,表现在两个方面:
(1)在原来面向过程的机制基础上,对C语言的功能做了不少扩展
(2)增加了面向对象的机制
面向对象和面向过程不是矛盾的,而是各有用途
C++标准每5年会有一个新版本,1998年的C++98、2003年的C++03、2007年的C++TR1、2011年的C++11.
转换操作符
static_cast
将一个值以符合逻辑的方式转型。这
组织和策略问题
第0条 不要拘泥于小节(了解哪此东本西不应该标准化)
编程规范不应施加个人喜好或者过时的做法。
第1条 在高警告级别干净利落地进行编译
高度重视警告:使用编译器的最高警告级别。应该要求
1、C++版本更迭
年份
C++标准
通用名
别名
标准编译选项
GNU扩展选项
1978
C with Classes
-
-
-
-
1998
ISO/IEC 14882:199
1、转换操作
(1)static_cast
将一个值以符合逻辑的方式转型。这个可以看作是“利用原值重建一个临时对象,并在设立初值时使用型别转换”。唯有当上述型别转换有所定义时,整个转换才会成功。
如:
一、概述
GCC一般包括预处理、编译、组装和链接。GCC的运行一般是调用命令gcc,在cross-compiling时使用machine-gcc或machine-gcc-version,在使用c++时