首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将double转换为字符数组C++

将double转换为字符数组C++
EN

Stack Overflow用户
提问于 2018-06-06 08:12:38
回答 7查看 12.8K关注 0票数 5

我尝试转换(并舍入)一个双精度数组为字符数组,而不是先在双精度数组上使用std::to_string进行转换。然而,我收到的却是随机的内存文本。我做错了什么?

下面是我的代码:

代码语言:javascript
复制
double d = 1.0929998; 
d = std::round(d * 100) / 100;

char s[sizeof(d)];
std::memcpy(s,&d,sizeof(d));

结果:

s: q=×£pñ?

目标值:

s: 1.09

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2018-06-06 08:22:51

您正在将double的文字字节转换为chars。double值是二进制表示(通常类似于IEEE 754),而char是字符的二进制表示(通常基于ASCII)。这两个不兼容。

不幸的是,这意味着您必须进行某种转换过程。要么是你说你不想做的std::to_string(),要么是一个更复杂的std::stringbuf (它无论如何都会在幕后调用std::to_string() )

票数 6
EN

Stack Overflow用户

发布于 2018-06-06 08:17:23

您正在将一个double (数字的二进制表示形式)复制到char数组中;这些字节没有理由与数字字符相对应。

票数 3
EN

Stack Overflow用户

发布于 2018-06-06 08:29:07

这并未经过测试,但您可以尝试:

代码语言:javascript
复制
std::string to_string(double x)
{
    std::ostringstream ss;
    ss << x;
    return ss.str();
}

然后,您可以将返回字符串的字符放入char数组中,如下所示:

代码语言:javascript
复制
std::string str = to_string(doubleValue);
char digits[str.length()];

然后,多亏了Remy Lebeau的评论,你可以这样做:

代码语言:javascript
复制
std::strncpy(digits, to_string(doubleValue).c_str(), sizeof(digits))

或者这样:

代码语言:javascript
复制
to_string(doubleValue).copy(digits, sizeof(digits))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50710587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档