在 C++ 中,字符转换函数涉及到多种字符集,包括窄字符集(ASCII)、宽字符集(Unicode),以及不同的编码方式(例如 UTF-8、UTF-16、UTF-32)。以下是一些常见的字符转换函数:
- 窄字符集到宽字符集:
mbstowcs_s: 将多字节字符串(窄字符集)转换为宽字符字符串(宽字符集)。
mbstowcs: 同上,不过不是线程安全版本。
wchar_t wideBuffer[256]; size_t convertedChars = 0; mbstowcs_s(&convertedChars, wideBuffer, "Hello", _TRUNCATE);
- 宽字符集到窄字符集:
wcstombs_s: 将宽字符字符串(宽字符集)转换为多字节字符串(窄字符集)。
wcstombs: 同上,不过不是线程安全版本。
char narrowBuffer[256]; size_t convertedChars = 0; wcstombs_s(&convertedChars, narrowBuffer, L"Hello", _TRUNCATE);
- 多字节字符串到宽字符字符串(Windows 特定):
MultiByteToWideChar: Windows API 函数,用于将多字节字符串转换为宽字符字符串。
wchar_t wideBuffer[256]; MultiByteToWideChar(CP_UTF8, 0, "Hello", -1, wideBuffer, sizeof(wideBuffer) / sizeof(wideBuffer[0]));
- 宽字符字符串到多字节字符串(Windows 特定):
WideCharToMultiByte: Windows API 函数,用于将宽字符字符串转换为多字节字符串。
char narrowBuffer[256]; WideCharToMultiByte(CP_UTF8, 0, L"Hello", -1, narrowBuffer, sizeof(narrowBuffer), NULL, NULL);
这些函数中,带有 _s 后缀的版本是线程安全的,因为它们多了一个参数用于指定目标缓冲区的大小。而不带 _s 后缀的版本在一些编译器中可能会引发警告,因为它们可能会导致缓冲区溢出。在使用这些函数时,请根据具体的场景和需求选择适当的函数。
在 C++ 中,数字(整数或浮点数)到字符以及字符到数字的转换通常使用以下函数:
- 数字到字符串(整数到字符串):
std::to_string: 将整数转换为字符串。
int num = 42; std::string strNum = std::to_string(num);
std::stringstream: 使用流操作符进行转换。
#include <sstream> int num = 42; std::stringstream ss; ss << num; std::string strNum = ss.str();
sprintf_s(非 C++11 标准,但在很多环境中支持): 将格式化的整数转换为字符串。
char buffer[256]; int num = 42; sprintf_s(buffer, sizeof(buffer), "%d", num);
- 字符串到数字(字符串到整数):
std::stoi: 将字符串转换为整数。
#include <string> std::string strNum = "42"; int num = std::stoi(strNum);
std::stringstream: 使用流操作符进行转换。
#include <sstream> std::string strNum = "42"; std::stringstream ss(strNum); int num; ss >> num;
atoi(非 C++11 标准,但在很多环境中支持): 将字符串转换为整数。
const char* strNum = "42"; int num = atoi(strNum);
- 浮点数到字符串:
std::to_string: 将浮点数转换为字符串。
double floatingNum = 3.14; std::string strFloatingNum = std::to_string(floatingNum);
std::stringstream: 使用流操作符进行转换。
#include <sstream> double floatingNum = 3.14; std::stringstream ss; ss << floatingNum; std::string strFloatingNum = ss.str();
sprintf_s(非 C++11 标准,但在很多环境中支持): 将格式化的浮点数转换为字符串。
char buffer[256]; double floatingNum = 3.14; sprintf_s(buffer, sizeof(buffer), "%f", floatingNum);
- 字符串到浮点数:
std::stod: 将字符串转换为双精度浮点数。
#include <string> std::string strFloatingNum = "3.14"; double floatingNum = std::stod(strFloatingNum);
std::stringstream: 使用流操作符进行转换。
#include <sstream> std::string strFloatingNum = "3.14"; std::stringstream ss(strFloatingNum); double floatingNum; ss >> floatingNum;
atof(非 C++11 标准,但在很多环境中支持): 将字符串转换为浮点数。
const char* strFloatingNum = "3.14"; double floatingNum = atof(strFloatingNum);
这些函数提供了在数字和字符串之间进行转换的常见方法。在实际应用中,你可以根据具体的需求和代码风格选择适当的函数。