繁体   English   中英

分配char缓冲区以保存float的文本表示形式

[英]Allocating char buffer to hold textual representation for float

C ++ 11具有to_string函数。 它在vsnprintf使用vsnprintf将值写入char缓冲区。 然后,将其用于初始化返回的字符串。 由于vsnprintf需要使用的缓冲区大小,因此将对其进行计算并传递。

对于确切的类型,使用sizeof计算sizeof 例如,对于unsigned long ,计算为4 * sizeof(unsigned long)

但是对于浮点类型,其计算方法有所不同。 在这种情况下,所需缓冲区的大小是使用

__gnu_cxx::__numeric_traits<float>::__max_exponent10 + 20

我认为这只是内部库的编写方式

std::numeric_limits<float>::max_exponent10 + 20

我的问题是,为什么尺寸是用这种方式计算的? 他们为什么不能只使用sizeof运算符。

要计算整数类型的最长可表示值,可以使用sizeof ,如下例所示:

在32位系统中, unsigned long最大值需要10数字,加上负号符号-\\0一个字节,则至少需要12个字节。 因此,我认为下面的表达式是一个很好的估计:

4 * sizeof(unsigned long) // = 16

对于float值,这是不正确的。 在这里, max_exponent10非常有用:

std :: numeric_limits :: max_exponent10的值是最大的正数n,因此10n是浮点类型T的可表示的有限值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM