C++17继续完善了字符串和数值的转换,提供了char*与数值件的转换:

数值 -> char*

整形类型转成字符串:

to_chars_result  to_chars(char* first, char* last, IntegerT value, int base = 10);

浮点数转成字符串:

to_chars_result to_chars(char* first, char* last, FloatT value);
to_chars_result to_chars(char* first, char* last, FloatT value, chars_format format);
to_chars_result to_chars(char* first, char* last, FloatT value, chars_format format, int precision);

[first, last)为存储转换结果的连续内存区间。

函数返回值为:

struct to_chars_result {
        char* ptr;
        errc ec; 
};

如果转换成功的话,ptr为写入到[first, last)的最后一个字符的下一个地址,ec值等于std::errc()。

如果转换不成功的话,ptr值为last,ec的值不等于std::errc()。

值得注意的是to_chars不会写入字符串结束符\0。

#include <charconv>
#include <string_view>
#include <iostream>
using namespace std;auto pRet = [](auto ptr, auto ec, char* str)
{if (ec == errc()){cout << "to_chars ok str=" << str << " ptr=" << ptr << endl;}else{cout<< "to_chars failed"<<endl;}
};int main()
{int d = 4321;char s1[10] = {0};auto [ptr1, ec1] = to_chars(s1, s1 + sizeof(s1), d);pRet(ptr1, ec1, s1);        //输出:to_chars ok str=4321 ptr=char s2[] = "12";auto [ptr2, ec2] = to_chars(s2, s2 + sizeof(s2), d);pRet(ptr2, ec2, s2);        //输出:to_chars failed,空间不够char s3[] = "1234567890";auto [ptr3, ec3] = to_chars(s3, s3 + sizeof(s3), d);pRet(ptr3, ec3, s3);        //输出:to_chars ok str=4321567890 ptr=567890string s4(10, '8');auto [ptr4, ec4] = to_chars(s4.data(), s4.data() + s4.size(), d);pRet(ptr4, ec4, s4.data()); //输出:to_chars ok str=4321888888 ptr=888888return 0;
}

char* -> 数值

from_chars_result from_chars(const char* first, const char* last, IntegerT& value, int base = 10);
from_chars_result from_chars(const char* first, const char* last, FloatT& value, chars_format format = chars_format::general);

[first, last):要装换的字符串

base:进制

返回值与to_chars相同

#include <charconv>
#include <iostream>
using namespace std;int main()
{char s1[] = "1234a";char s2[] = " 5678";int i1 = 0, i2 = 0;auto [ptr1, ec1] = from_chars(s1, s1+sizeof(s1), i1);if (ec1 == errc()){cout << "from_chars ok i1=" << i1 << " ptr1=" << ptr1 << endl;}else{cout<< "from_chars failed"<<" ptr1=" << ptr1 << endl;}auto [ptr2, ec2] = from_chars(s2, s1+sizeof(s2), i2);if (ec2 == errc()){cout << "from_chars ok i2=" << i2 << " ptr2=" << ptr2 << endl;}else{cout<< "from_chars failed"<<" ptr2=" << ptr2 << endl;}return 0;
}运行程序输出:
from_chars ok i1=1234 ptr1=a
from_chars failed ptr2= 5678

可见,from_chars不能忽略字符串开头的空白

C++(17):from_chars和to_chars相关推荐

  1. c ++函数功能查询器_C ++ 17新功能和技巧

    c ++函数功能查询器 目录 (Table of Contents) Introduction 介绍 Settings an integrated development environment (I ...

  2. 在C ++中将int转换为字符串的最简单方法

    在C ++中从int转换为等效string的最简单方法是什么. 我知道两种方法. 有没有更简单的方法? (1) int a = 10; char *intStr = itoa(a); string s ...

  3. arduino int转char_将char *转换为int arduino(Convert char* to int arduino)

    将char *转换为int arduino(Convert char* to int arduino) 我有问题从char获取int值..这里 Serial.println(((char *)&quo ...

  4. c++17 to_chars、from_chars、if、结构化绑定

    c++17 to_chars.from_chars.if.结构化绑定 说明 std::to_chars std::from_chars 示例代码 输出 参考 说明 std::to_chars 通过成功 ...

  5. C ++ 17中有哪些新功能?

    C ++ 17现在功能齐全,因此不太可能经历大的变化. 为C ++ 17提出了数百个提案. 在C ++ 17中,哪些特性被添加到C ++中? 当使用支持"C ++ 1z"的C ++ ...

  6. C++17新特性总结

    参考链接:C++17 一.语言特性 1.1 折叠表达式 C++17中引入了折叠表达式,主要是方便模板编程,分为左右折叠,下图为其解包形式: template <typename... Args& ...

  7. C++11、C++14、C++17、C++20新特性总结(5万字详解)

    文章目录 C++ 11是什么,C++ 11标准的由来 C++ auto类型推导完全攻略 auto 类型推导的语法和规则 auto 的高级用法 auto 的限制 auto 的应用 使用 auto 定义迭 ...

  8. 【CV】吴恩达机器学习课程笔记第17章

    本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片 机器学习 | Coursera 吴恩达机器学习系列课程_bilibili 目录 17 大规模机器学习 17-1 学习大数据集 17-2 随 ...

  9. 零起点学算法17——比较2个数大小

    零起点学算法17--比较2个数大小 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lld Description 输入2个整数, ...

最新文章

  1. Oracle存储过程返回游标实例详解
  2. 机器视觉:ransac算法详解
  3. sql注入问题-视图-事物-以及存储过程(可视化工具)
  4. strictmath_Java StrictMath nextAfter()方法与示例
  5. JDK8下载,安装及环境变量的配置
  6. 剑指Offer之左旋字符串
  7. BoltDB 一个简单的纯 Go key/value 存储 [译]
  8. Theano学习笔记:Theano的艰辛安装体验
  9. 微软切断XP供应 Vista成制造商惟一选择
  10. Iaas,paas,saas区别与联系
  11. linux通过usb链接网络,Nokia N9 通过USB连接使用PC(Linux)主机的网络
  12. 2020-12-02HTML及标签
  13. Linux XFS文件系统修复
  14. 第一章 SQL中使用的符号
  15. costmap_2d 中计算footprint 的内切圆半径和外切圆半径的函数解析——点到线段的距离计算
  16. 4.Transact_Sql语言基础
  17. 鸿蒙系统推广时间,鸿蒙系统将全面推广,目标覆盖3亿台设备,第三方IoT可达1亿台...
  18. 计算机网络设备的种类,计算机网络设备选型依据.ppt
  19. uniapp离线打包SDK
  20. Windows Installer:正在安装其他程序。请等待该安装完成,然后再次尝试安装此软件

热门文章

  1. .net 文字转语音简单应用 SpeedSynthesis,部署IIS
  2. 谈20年美赛与我的建模完整经历
  3. 计算机视觉基础7---色彩空间变换
  4. 微信小程序原生集成vant weapp注意点 (https://youzan.github.io/vant-weapp/#/intro)
  5. 支线剧情-上下界网络流
  6. 【C++编程题】买房与选房(排序,模拟)
  7. linux命令行界面出现菱形,Linux显示菱形解决.md
  8. k8s(Kubernetes)中Pod,Deployment,ReplicaSet,Service之间关系分析
  9. Netfilter和iptables学习总结
  10. scrapy爬动态网址哔哩哔哩