C ++有符号字符加倍

Posted

技术标签:

【中文标题】C ++有符号字符加倍【英文标题】:C++ signed char to double 【发布时间】:2011-04-07 14:58:43 【问题描述】:

我是 C++ 新手,在将有符号字符转换为双精度字符时遇到问题。最初的想法是将带符号的 char 转换为 const char* 并使用 atof 返回双精度。

signed char x = '100';
const char * cChar = x;
std::cout << atof(cChar);

我可以尝试什么来解决这个问题?

【问题讨论】:

第一行不是有效的 C 或 C++。你的意思是signed char x = 100; 还是const signed char *x = "100"; 我认为 '100' 实际上是有效的 - 一个多字符常量。它的值是'1','0'和'0'的一些编译器相关的整数函数。 @Oli:在 C++ 中,第一行是 valid,但 '100' 的值是实现定义的(它是多字符文字,2.13.2/1 ),除非该值在范围内,否则将其转换为 signed char 的结果也是实现定义的(有符号溢出,4.7/3)。在 C 语言中,我懒得在另一个标准中查找参考资料 ;-) 字符、指向字符的指针和字符串在 C++ 中都是不同的东西。我不清楚您要在哪些之间进行转换。如果x 的类型为signed char,则const char *cChar = x 是无稽之谈。 【参考方案1】:
signed char x = 100;
double d = x;
cout << d;

const char * x = "100";
double d = atof(x);
cout << d;

'100' 错误 - 您需要 const char * x = "100";char x=100

【讨论】:

【参考方案2】:

你的意思是

const char *x = "100";
std::cout << atof(x);

?

【讨论】:

其实我觉得这可能是正确的答案,而不是我自己的。我没有发现单引号,这意味着原始海报正在尝试使用字符串。显然,混淆在于,在 C 中,char 是可用的,并且通常仅用于存储少量数字。【参考方案3】:

您可能想要使用strtod() 或者您可以使用boost::lexical_cast&lt;&gt;

【讨论】:

【参考方案4】:

我试图弄清楚你目前的理解是什么

signed char x = '100';

这行代码采用不存在的字符“100”,通常字符是一个符号,例如“a”和“9”。除非它们是特殊的不可打印序列,例如 null '\0' 或换行符 '\n',甚至是转义字符,例如单引号'\''

C 风格的字符串由双引号表示,并在末尾有一个隐藏字节,其中包含一个空终止符,双引号表示法为您处理空。

如果您希望将字符串 "100" 转换为双精度,那么以下将起作用

double a;
char b [4] = "100";
a = atof(b);

【讨论】:

【参考方案5】:

应该是:

double value = static_cast<double>(x);

你目前正在做的是创建一个指向内存地址 100 的指针,你几乎肯定不拥有它,然后尝试从那里读取一个字符串,但几乎可以肯定它不存在。

(注意:我最初建议使用 C 样式版本,double value = (double)x;,请参阅下面的 cmets,了解为什么在 C++ 中更好地避免 C 样式转换)

【讨论】:

不,这里完全错误。这里没有创建指针,这样的转换是有问题的。 然而,根据问题将“signed char to double”转换为正确的方法。在发帖时,尚不清楚发帖者是打算处理字符数组(即字符串)还是单个签名字符。 @Tommy 推荐 C++ 中的 C 风格转换是仍然错误的答案,对不起。 @Konrad:假设您已经承认“这里没有创建指针”的问题;您为什么认为 C 风格的演员表是错误的?例如,我注意到这是 cplusplus.com 上提供的第一个建议 — 请参阅 cplusplus.com/doc/tutorial/typecasting @Tommy cplusplus.com 给出了不好的建议。有关讨论,请参见 ***.com/q/527999/1968 - 这些规则在过去几年中已经非常完善。

以上是关于C ++有符号字符加倍的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何替换字符串中的“&”符号?

请教:C语言中如何将一字符串转换成无符号整型

C ++将十六进制字符串转换为有符号整数

任何可用于 C 中无符号字符指针行为的文档? [复制]

如何以优雅有效的方式将无符号/有符号整数/长整数转换为 C 字符串?

C中的无符号字符连接