如何将固定长度字符*转换为数字或将非空结尾字符*转换为数字
How to convert a fix length char* to a number or convert a non-null terminated char* to number?
#include <iostream> // std::cout
#include <string> // std::string, std::stoi
int main ()
{
const char* arrNumber = "ff000A;";
const std::string firstNum = std::string(arrNumber, 2);
const std::string secondNum = std::string(arrNumber+2, 4);
const int i_first = std::stoi(firstNum, nullptr, 16);
const int i_second= std::stoi(secondNum, nullptr, 16);
std::cout << "i_first: " << i_first << std::endl;
std::cout << "i_second: " << i_second << std::endl;
return 0;
}
我这里有两个问题。
如何将固定长度的
char*
转换为数字?在上面的例子中,我们需要将前两个十六进制字符提取为一个整数。由于构建了std::string
,所提出的方法很慢,我正在寻找类似于以下原型的更好的解决方案。stoi_x(const char* start_, size_t len, int base = 10)
给定这个原型,上面的例子可以写成如下:
const int i_first = stoi_x(arrNumber, 2, 16);
如何将没有空终止符的
char*
转换为数字?同样,我正在寻找类似于以下原型的更好解决方案。stoi_x(const char* start_, char end_, int base = 10)
给定这个原型,上面的例子可以写成如下:
const int i_second = stoi_x(arrNumber+2, ';', 16);
您可以使用
std::from_chars
,它将使您开箱即用。 它采用指向开始元素的指针和经过最后一个元素的指针,并将其转换为数字。 如果它根本无法转换字符串,它将填充返回对象中的错误代码,否则它会转换它可以转换的内容,并返回一个指针,指向它无法在返回对象中转换的数据部分。 在代码中使用它将其更改为
int main ()
{
const char* arrNumber = "ff000A;";
int i_first, i_second;
std::from_chars(arrNumber, arrNumber + 2, i_first, 16);
std::from_chars(arrNumber + 2, arrNumber + 6, i_second, 16);
std::cout << "i_first: " << i_first << std::endl;
std::cout << "i_second: " << i_second << std::endl;
return 0;
}
如果你不喜欢这样,你不能将转换的结果分配给一个常量变量,那么你可以把它包装在你自己的函数中,比如
template<typename T>
auto from_chars(char const * begin, char const * end, int base = 10)
{
T ret{};
std::from_chars(begin, end, ret, base);
return ret;
}
然后你可以像这样使用它
int main ()
{
const char* arrNumber = "ff000A;";
const int i_first = from_chars<int>(arrNumber, arrNumber + 2, 16);
const int i_second = from_chars<int>(arrNumber + 2, arrNumber + 6, 16);
std::cout << "i_first: " << i_first << std::endl;
std::cout << "i_second: " << i_second << std::endl;
return 0;
}
请注意,我没有进行任何错误处理。 在生产代码中,您应该检查是否发生了错误,因为std::from_chars
不会引发任何异常。
相关文章:
- 将数字转换为字母(例如:123 转换为一二三)
- 将数字转换为单词
- 使用if-else将数字转换为单词
- 将数字转换为填充字符串
- 函数在许多数字上转换为基数 1 时减去 2?
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 将 C 函数转换为 C++ 以检查数字是否有效
- 编译时间文本到数字转换 (atoi)
- 以C++格式将字符串转换为数字
- 在 c++ 中将数字转换为矢量数组的函数
- 奇怪的数字转换C++
- 我想使用 std::stoi 函数在 cpp 中将字符串转换为整数,因为我想在字符串中找到不同数字的总和(在下级酶中)
- 用C++将浮点数字转换为本地化字符串
- 我需要静态转换我的数字模板值吗
- 如何将boost::asio::ip::address_v6 ip转换为2个uint64_t数字,并从2个uint 64
- Rcpp - 用二进制函数转换数字向量?
- 我如何使用堆栈转换数字从基数10到基数2在c++
- 如何在c++中从字节数组中的整数转换数字
- c++程序转换数字的位数