gpt4 book ai didi

c++ - 创建包含字符序列的 nan 时,如何取回字符序列?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:17 25 4
gpt4 key购买 nike

做的时候

const double d = std::nan ("Hello");

你得到一个包含字符串“Hello”的 NAN。如何从变量 d 中取消这个字符串?是否根本没有符合标准的方式?如果无法取回字符串,此功能似乎意义不大。

最佳答案

C++ 标准规定,在为 fprintf 及其亲戚(例如 printf)格式化数据时,实现可能会显示以 NaN 编码的数据,并且通过 C++ 功能继承自 fprintf,例如输出流格式化程序。这是 C++ 标准中关于获取有关 NaN 数据信息的唯一明确规定。 (我在 C 标准中包含了语句,C++ 通过引用将其合并。)关于这一点,该标准表示,实现在格式化 NaN 时可能包含编码数据,但它在实现定义的方式,实现可能会忽略这一点。

当然,您可以通过检查表示数据的字节来检查以 NaN 编码的数据。但是,如何处理传递给 nan 函数的字符是实现定义的。一个实现可以选择不对它们做任何事情,它可以将它们逐字地包含在 NaN 的字节中(如果它们适合),或者它可以编码或解释它们,例如期望字符串中的十六进制数字,它将被编码成NaN 的位。 double 常用的 IEEE-754 基本 64 位二进制浮点格式有 51 位可用于 quiet NaN 的有效负载,足以固定六个八位字符,因此字符串“Hello”可以编码为 NaN。

以下是标准对 nan 函数的解释:

  • C++ 从 C 继承了 nan 函数,并将其留给 C 来指定它的作用。
  • C 表示 nan("n-char-sequence") 等价于 strtod("NAN(n-char-sequence)", (char**)NULL)
  • C 说n-char-sequence数字非数字 字符的序列。 数字 字符为 0-9,非数字 字符为 _、A-Z 和 a-z。所以字符串 "Hello" 是一个n-char-sequence
  • C 说,关于带有“NAN”的 strtod 和 *n-char-sequence,n-char-sequence 的含义是实现定义的。

因此,一个实现可能对您在 nan 参数中提供的字节进行编码。

C 标准(和继承的 C++)关于格式化 NaN 的说法是:

  • “表示 NaN 的 double 参数被转换为 [-]nan 或 [-]nan(n-char-sequence) 样式之一——哪种样式,以及任何 n-char-sequence 的含义,都是实现定义的。”

关于c++ - 创建包含字符序列的 nan 时,如何取回字符序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51871993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com