我知道的唯一方法是:
#include <sstream>
#include <string.h>
using namespace std;
int main() {
int number=33;
stringstream strs;
strs << number;
string temp_str = strs.str();
char* char_type = (char*) temp_str.c_str();
}
但是有没有打字少的方法?
我知道的唯一方法是:
#include <sstream>
#include <string.h>
using namespace std;
int main() {
int number=33;
stringstream strs;
strs << number;
string temp_str = strs.str();
char* char_type = (char*) temp_str.c_str();
}
但是有没有打字少的方法?
在 C++17 中,std::to_chars
用作:
std::array<char, 10> str;
std::to_chars(str.data(), str.data() + str.size(), 42);
在 C++11 中,std::to_string
用作:
std::string s = std::to_string(number);
char const *pchar = s.c_str(); //use char const* as target type
在 C++03 中,您所做的一切都很好,除了const
用作:
char const* pchar = temp_str.c_str(); //dont use cast
我认为您可以使用 sprintf :
int number = 33;
char* numberstring[(((sizeof number) * CHAR_BIT) + 2)/3 + 2];
sprintf(numberstring, "%d", number);
你可以使用提升
#include <boost/lexical_cast.hpp>
string s = boost::lexical_cast<string>( number );
C 风格的解决方案可能是使用,但更好的方法是使用/itoa
将此数字打印到字符串中。检查这个问题:如何将整数转换为可移植的字符串?sprintf
snprintf
请注意,itoa
函数未在 ANSI-C 中定义,也不是 C++ 的一部分,但某些编译器支持。这是一个非标准功能,因此您应该避免使用它。也检查这个问题:Alternative to itoa() for convert integer to string C++?
另请注意,在使用 C++ 编程时编写 C 风格的代码被认为是不好的做法,有时被称为“可怕的风格”。你真的想把它转换成 C 风格的char*
字符串吗?:)
我不会在最后一行中对 const 进行类型转换,因为它的存在是有原因的。如果你不能忍受 const char* 那么你最好复制 char 数组,如:
char* char_type = new char[temp_str.length()];
strcpy(char_type, temp_str.c_str());
好吧..首先我需要做这个问题所要求的东西,但我需要它快!不幸的是,“更好”的方法是将近 600 行代码!!!请原谅它的名字与它所做的事情没有任何关系。正确的名称是Integer64ToCharArray(int64_t value);
随意尝试清理该代码而不影响性能。
输入:从 min 到 max 范围内的任何有符号 64 位值。
例子:
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MAX) << '\n';
std::cout << "Test: " << AddDynamicallyToBuffer(LLONG_MIN) << '\n';
输出:
Test: 9223372036854775807
Test: -9223372036854775808
原始速度测试:( Integer64ToCharArray(); )
最佳情况 1 位数值。
循环:100,000,000,花费时间:1,381(Milli),每循环时间 13(Nano)
最坏情况下的 20 位数值。
循环:100,000,000,花费时间:22,656(Milli),每循环时间 226(Nano
新的设计速度测试:( AddDynamicallyToBuffer(); )
最佳情况 1 位数值。
循环:100,000,000,花费时间:427(Milli),每循环时间 4(Nano)
32 位最坏情况 - 11 位数值。
循环:100,000,000,花费时间:1,991(Milli),每循环时间 19(Nano)
负 1 万亿最坏情况 - 14 位数值。
循环:100,000,000,花费时间:5,681(Milli),每循环时间 56(Nano)
64 位更坏情况 - 20 位数值。
循环:100,000,000,花费时间:13,148(Milli),每次循环时间 131(Nano)
这个怎么运作!
我们执行分而治之的技术,一旦我们现在字符串的最大长度,我们只需单独设置每个字符值。如上面的速度测试所示,较大的长度会导致较大的性能损失,但它仍然比原始循环方法快得多,并且在两种方法之间实际上没有代码更改,然后循环不再使用。
在我的用法中,因此我返回偏移量,而不是编辑 char 数组的缓冲区,而是开始更新顶点数据,并且该函数有一个额外的偏移量参数,因此它没有初始化为 -1。
请参阅此答案https://stackoverflow.com/a/23010605/2760919
对于您的情况,只需将 snprintf 中的类型从 long ("%ld") 更改为 int ("%n")。
这可能有点晚了,但我也有同样的问题。在 C++17 中使用“charconv”库解决了转换为 char 的问题。
您也可以使用强制转换。
例子:
string s;
int value = 3;
s.push_back((char)('0' + value));
将我们的整数值转换为 std::string 以便我们知道多长(多少位数)。
然后我们创建字符串字母大小+1的字符数组长度,所以我们可以将我们的值复制到字符串然后是字符数组。
#include <string>
char* intToStr(int data) {
std::string strData = std::to_string(data);
char* temp = new char[strData.length() + 1];
strcpy(temp, strData.c_str());
return temp;
}